diff options
Diffstat (limited to 'db2')
52 files changed, 451 insertions, 345 deletions
diff --git a/db2/Makefile b/db2/Makefile index a7521b6580..a75dc5aef1 100644 --- a/db2/Makefile +++ b/db2/Makefile @@ -19,7 +19,7 @@ # # Sub-makefile for libdb. # -# The code is lifted straight from the db 2.3.4 distribution +# The code is lifted straight from the db 2.3.6 distribution # with minimal changes. # @@ -90,6 +90,7 @@ $(objpfx)db_checkpoint: $(objpfx)libdb.so$(libdb.so-version) $(objpfx)db_deadlock: $(objpfx)libdb.so$(libdb.so-version) $(objpfx)db_dump: $(objpfx)libdb.so$(libdb.so-version) $(objpfx)db_load: $(objpfx)libdb.so$(libdb.so-version) +$(objpfx)db_printlog: $(objpfx)libdb.so$(libdb.so-version) $(objpfx)db_recover: $(objpfx)libdb.so$(libdb.so-version) $(objpfx)db_stat: $(objpfx)libdb.so$(libdb.so-version) else @@ -100,6 +101,7 @@ $(objpfx)db_checkpoint: $(objpfx)libdb.a $(objpfx)db_deadlock: $(objpfx)libdb.a $(objpfx)db_dump: $(objpfx)libdb.a $(objpfx)db_load: $(objpfx)libdb.a +$(objpfx)db_printlog: $(objpfx)libdb.a $(objpfx)db_recover: $(objpfx)libdb.a $(objpfx)db_stat: $(objpfx)libdb.a endif diff --git a/db2/btree/bt_close.c b/db2/btree/bt_close.c index 4e80634e86..7044599dd2 100644 --- a/db2/btree/bt_close.c +++ b/db2/btree/bt_close.c @@ -47,7 +47,7 @@ #include "config.h" #ifndef lint -static const char sccsid[] = "@(#)bt_close.c 10.22 (Sleepycat) 8/23/97"; +static const char sccsid[] = "@(#)bt_close.c 10.23 (Sleepycat) 9/2/97"; #endif /* not lint */ #ifndef NO_SYSTEM_INCLUDES @@ -157,14 +157,12 @@ __bam_upstat(dbp) if (F_ISSET(dbp, DB_AM_INMEM | DB_AM_RDONLY)) return; - /* Lock the page. */ - if (__bam_lget(dbp, 0, pgno, DB_LOCK_WRITE, &mlock) != 0) - return; - flags = 0; pgno = PGNO_METADATA; - /* Get the page. */ + /* Lock and retrieve the page. */ + if (__bam_lget(dbp, 0, pgno, DB_LOCK_WRITE, &mlock) != 0) + return; if (__bam_pget(dbp, (PAGE **)&meta, &pgno, 0) == 0) { /* Log the change. */ if (DB_LOGGING(dbp) && diff --git a/db2/btree/bt_compare.c b/db2/btree/bt_compare.c index e802fd24ab..a68b1fa891 100644 --- a/db2/btree/bt_compare.c +++ b/db2/btree/bt_compare.c @@ -47,7 +47,7 @@ #include "config.h" #ifndef lint -static const char sccsid[] = "@(#)bt_compare.c 10.3 (Sleepycat) 7/19/97"; +static const char sccsid[] = "@(#)bt_compare.c 10.4 (Sleepycat) 9/3/97"; #endif /* not lint */ #ifndef NO_SYSTEM_INCLUDES @@ -103,7 +103,7 @@ __bam_cmp(dbp, k1, e) bo = NULL; if (TYPE(h) == P_LBTREE) { bk = GET_BKEYDATA(h, e->indx); - if (bk->type == B_OVERFLOW) + if (B_TYPE(bk->type) == B_OVERFLOW) bo = (BOVERFLOW *)bk; else { memset(&k2, 0, sizeof(k2)); @@ -112,7 +112,7 @@ __bam_cmp(dbp, k1, e) } } else { bi = GET_BINTERNAL(h, e->indx); - if (bi->type == B_OVERFLOW) + if (B_TYPE(bi->type) == B_OVERFLOW) bo = (BOVERFLOW *)(bi->data); else { memset(&k2, 0, sizeof(k2)); diff --git a/db2/btree/bt_conv.c b/db2/btree/bt_conv.c index 537e2f98ec..c9d5d1bc3e 100644 --- a/db2/btree/bt_conv.c +++ b/db2/btree/bt_conv.c @@ -8,7 +8,7 @@ #include "config.h" #ifndef lint -static const char sccsid[] = "@(#)bt_conv.c 10.3 (Sleepycat) 8/9/97"; +static const char sccsid[] = "@(#)bt_conv.c 10.4 (Sleepycat) 9/3/97"; #endif /* not lint */ #ifndef NO_SYSTEM_INCLUDES @@ -69,6 +69,8 @@ __bam_mswap(pg) u_int8_t *p; p = (u_int8_t *)pg; + + /* Swap the meta-data information. */ SWAP32(p); /* lsn.file */ SWAP32(p); /* lsn.offset */ SWAP32(p); /* pgno */ @@ -79,5 +81,19 @@ __bam_mswap(pg) SWAP32(p); /* minkey */ SWAP32(p); /* free */ SWAP32(p); /* flags */ + + /* Swap the statistics. */ + p = (u_int8_t *)&((BTMETA *)pg)->stat; + SWAP32(p); /* bt_freed */ + SWAP32(p); /* bt_pfxsaved */ + SWAP32(p); /* bt_split */ + SWAP32(p); /* bt_rootsplit */ + SWAP32(p); /* bt_fastsplit */ + SWAP32(p); /* bt_added */ + SWAP32(p); /* bt_deleted */ + SWAP32(p); /* bt_get */ + SWAP32(p); /* bt_cache_hit */ + SWAP32(p); /* bt_cache_miss */ + return (0); } diff --git a/db2/btree/bt_cursor.c b/db2/btree/bt_cursor.c index 592ec9b3ff..efae556030 100644 --- a/db2/btree/bt_cursor.c +++ b/db2/btree/bt_cursor.c @@ -8,7 +8,7 @@ #include "config.h" #ifndef lint -static const char sccsid[] = "@(#)bt_cursor.c 10.26 (Sleepycat) 8/24/97"; +static const char sccsid[] = "@(#)bt_cursor.c 10.27 (Sleepycat) 9/3/97"; #endif /* not lint */ #ifndef NO_SYSTEM_INCLUDES @@ -201,9 +201,9 @@ __bam_c_del(dbc, flags) /* Set the intent-to-delete flag on the page and in all cursors. */ if (cp->dpgno == PGNO_INVALID) - GET_BKEYDATA(h, indx + O_INDX)->deleted = 1; + B_DSET(GET_BKEYDATA(h, indx + O_INDX)->type); else - GET_BKEYDATA(h, indx)->deleted = 1; + B_DSET(GET_BKEYDATA(h, indx)->type); (void)__bam_ca_delete(dbp, pgno, indx, NULL); ret = memp_fput(dbp->mpf, h, DB_MPOOL_DIRTY); @@ -643,7 +643,7 @@ __bam_c_first(dbp, cp) /* If it's an empty page or a deleted record, go to the next one. */ if (NUM_ENT(cp->page) == 0 || - GET_BKEYDATA(cp->page, cp->indx + O_INDX)->deleted) + B_DISSET(GET_BKEYDATA(cp->page, cp->indx + O_INDX)->type)) if ((ret = __bam_c_next(dbp, cp, 0)) != 0) return (ret); @@ -653,7 +653,7 @@ __bam_c_first(dbp, cp) /* If it's a deleted record, go to the next one. */ if (cp->dpgno != PGNO_INVALID && - GET_BKEYDATA(cp->page, cp->dindx)->deleted) + B_DISSET(GET_BKEYDATA(cp->page, cp->dindx)->type)) if ((ret = __bam_c_next(dbp, cp, 0)) != 0) return (ret); return (0); @@ -694,7 +694,7 @@ __bam_c_last(dbp, cp) /* If it's an empty page or a deleted record, go to the previous one. */ if (NUM_ENT(cp->page) == 0 || - GET_BKEYDATA(cp->page, cp->indx + O_INDX)->deleted) + B_DISSET(GET_BKEYDATA(cp->page, cp->indx + O_INDX)->type)) if ((ret = __bam_c_prev(dbp, cp)) != 0) return (ret); @@ -704,7 +704,7 @@ __bam_c_last(dbp, cp) /* If it's a deleted record, go to the previous one. */ if (cp->dpgno != PGNO_INVALID && - GET_BKEYDATA(cp->page, cp->dindx)->deleted) + B_DISSET(GET_BKEYDATA(cp->page, cp->dindx)->type)) if ((ret = __bam_c_prev(dbp, cp)) != 0) return (ret); return (0); @@ -793,9 +793,9 @@ __bam_c_next(dbp, cp, initial_move) /* Ignore deleted records. */ if (dbp->type == DB_BTREE && ((cp->dpgno == PGNO_INVALID && - GET_BKEYDATA(cp->page, indx + O_INDX)->deleted) || + B_DISSET(GET_BKEYDATA(cp->page, indx + O_INDX)->type)) || (cp->dpgno != PGNO_INVALID && - GET_BKEYDATA(cp->page, indx)->deleted))) { + B_DISSET(GET_BKEYDATA(cp->page, indx)->type)))) { indx += adjust; continue; } @@ -908,9 +908,9 @@ __bam_c_prev(dbp, cp) indx -= adjust; if (dbp->type == DB_BTREE && ((cp->dpgno == PGNO_INVALID && - GET_BKEYDATA(cp->page, indx + O_INDX)->deleted) || + B_DISSET(GET_BKEYDATA(cp->page, indx + O_INDX)->type)) || (cp->dpgno != PGNO_INVALID && - GET_BKEYDATA(cp->page, indx)->deleted))) + B_DISSET(GET_BKEYDATA(cp->page, indx)->type)))) continue; /* @@ -997,7 +997,7 @@ __bam_c_search(dbp, cp, key, flags, isrecno, exactp) /* If it's a deleted record, go to the next or previous one. */ if (cp->dpgno != PGNO_INVALID && - GET_BKEYDATA(cp->page, cp->dindx)->deleted) + B_DISSET(GET_BKEYDATA(cp->page, cp->dindx)->type)) if (flags == S_KEYLAST) { if ((ret = __bam_c_prev(dbp, cp)) != 0) return (ret); @@ -1027,7 +1027,7 @@ __bam_ovfl_chk(dbp, cp, indx, to_end) /* Check for an overflow entry. */ bo = GET_BOVERFLOW(cp->page, indx); - if (bo->type != B_DUPLICATE) + if (B_TYPE(bo->type) != B_DUPLICATE) return (0); /* diff --git a/db2/btree/bt_delete.c b/db2/btree/bt_delete.c index e7ec4dfe3e..98929540e4 100644 --- a/db2/btree/bt_delete.c +++ b/db2/btree/bt_delete.c @@ -47,7 +47,7 @@ #include "config.h" #ifndef lint -static const char sccsid[] = "@(#)bt_delete.c 10.18 (Sleepycat) 8/24/97"; +static const char sccsid[] = "@(#)bt_delete.c 10.21 (Sleepycat) 9/3/97"; #endif /* not lint */ #ifndef NO_SYSTEM_INCLUDES @@ -107,7 +107,7 @@ __bam_delete(argdbp, txn, key, flags) break; for (; cnt > 0; --cnt, ++t->lstat.bt_deleted) if (__bam_ca_delete(dbp, h->pgno, indx, NULL) != 0) { - GET_BKEYDATA(h, indx + O_INDX)->deleted = 1; + B_DSET(GET_BKEYDATA(h, indx + O_INDX)->type); indx += P_INDX; } else if ((ret = __bam_ditem(dbp, h, indx)) != 0 || (ret = __bam_ditem(dbp, h, indx)) != 0) @@ -180,7 +180,7 @@ __ram_delete(argdbp, txn, key, flags) stack = 1; /* If the record has already been deleted, we couldn't have found it. */ - if (GET_BKEYDATA(h, indx)->deleted) { + if (B_DISSET(GET_BKEYDATA(h, indx)->type)) { ret = DB_KEYEMPTY; goto done; } @@ -193,14 +193,13 @@ __ram_delete(argdbp, txn, key, flags) if ((ret = __bam_ditem(dbp, h, indx)) != 0) goto err; - bk.deleted = 1; - bk.type = B_KEYDATA; + B_TSET(bk.type, B_KEYDATA, 1); bk.len = 0; memset(&hdr, 0, sizeof(hdr)); hdr.data = &bk; hdr.size = SSZA(BKEYDATA, data); memset(&data, 0, sizeof(data)); - data.data = (char *) ""; + data.data = (char *)""; data.size = 0; if ((ret = __db_pitem(dbp, h, indx, BKEYDATA_SIZE(0), &hdr, &data)) != 0) @@ -263,7 +262,7 @@ __bam_ditem(dbp, h, indx) switch (TYPE(h)) { case P_IBTREE: bi = GET_BINTERNAL(h, indx); - switch (bi->type) { + switch (B_TYPE(bi->type)) { case B_DUPLICATE: case B_OVERFLOW: nbytes = BINTERNAL_SIZE(bi->len); @@ -298,14 +297,14 @@ __bam_ditem(dbp, h, indx) /* FALLTHROUGH */ case P_LRECNO: bk = GET_BKEYDATA(h, indx); - switch (bk->type) { + switch (B_TYPE(bk->type)) { case B_DUPLICATE: case B_OVERFLOW: nbytes = BOVERFLOW_SIZE; offpage: /* Delete duplicate/offpage chains. */ bo = GET_BOVERFLOW(h, indx); - if (bo->type == B_DUPLICATE) { + if (B_TYPE(bo->type) == B_DUPLICATE) { if ((ret = __db_ddup(dbp, bo->pgno, __bam_free)) != 0) return (ret); diff --git a/db2/btree/bt_put.c b/db2/btree/bt_put.c index 632c3d185b..0f0b1e7126 100644 --- a/db2/btree/bt_put.c +++ b/db2/btree/bt_put.c @@ -47,7 +47,7 @@ #include "config.h" #ifndef lint -static const char sccsid[] = "@(#)bt_put.c 10.23 (Sleepycat) 8/22/97"; +static const char sccsid[] = "@(#)bt_put.c 10.24 (Sleepycat) 9/3/97"; #endif /* not lint */ #ifndef NO_SYSTEM_INCLUDES @@ -120,7 +120,7 @@ retry: /* */ replace = 0; if (exact && flags == DB_NOOVERWRITE) { - if (!GET_BKEYDATA(h, indx + O_INDX)->deleted) { + if (!B_DISSET(GET_BKEYDATA(h, indx + O_INDX)->type)) { ret = DB_KEYEXIST; goto err; } @@ -436,16 +436,14 @@ __bam_iitem(dbp, hp, indxp, key, data, op, flags) */ bigkey = bigdata = 0; if (LF_ISSET(BI_NEWKEY) && key->size > t->bt_ovflsize) { - kbo.deleted = 0; - kbo.type = B_OVERFLOW; + B_TSET(kbo.type, B_OVERFLOW, 0); kbo.tlen = key->size; if ((ret = __db_poff(dbp, key, &kbo.pgno, __bam_new)) != 0) goto err; bigkey = 1; } if (data->size > t->bt_ovflsize) { - dbo.deleted = 0; - dbo.type = B_OVERFLOW; + B_TSET(dbo.type, B_OVERFLOW, 0); dbo.tlen = data->size; if ((ret = __db_poff(dbp, data, &dbo.pgno, __bam_new)) != 0) goto err; @@ -472,7 +470,7 @@ __bam_iitem(dbp, hp, indxp, key, data, op, flags) if (op == DB_CURRENT) { bk = GET_BKEYDATA(h, indx + (TYPE(h) == P_LBTREE ? O_INDX : 0)); - if (bk->type == B_OVERFLOW) + if (B_TYPE(bk->type) == B_OVERFLOW) have_bytes = BOVERFLOW_PSIZE; else have_bytes = BKEYDATA_PSIZE(bk->len); @@ -492,7 +490,7 @@ __bam_iitem(dbp, hp, indxp, key, data, op, flags) * alignment) and do a delete/insert otherwise. */ if (op == DB_CURRENT && !bigdata && - bk->type == B_KEYDATA && have_bytes == need_bytes) + B_TYPE(bk->type) == B_KEYDATA && have_bytes == need_bytes) dcopy = 1; if (have_bytes < need_bytes) needed += need_bytes - have_bytes; @@ -622,9 +620,8 @@ __bam_iitem(dbp, hp, indxp, key, da |
