summaryrefslogtreecommitdiff
path: root/db2/btree
diff options
context:
space:
mode:
Diffstat (limited to 'db2/btree')
-rw-r--r--db2/btree/bt_close.c10
-rw-r--r--db2/btree/bt_compare.c6
-rw-r--r--db2/btree/bt_conv.c18
-rw-r--r--db2/btree/bt_cursor.c26
-rw-r--r--db2/btree/bt_delete.c17
-rw-r--r--db2/btree/bt_put.c32
-rw-r--r--db2/btree/bt_rec.c8
-rw-r--r--db2/btree/bt_recno.c6
-rw-r--r--db2/btree/bt_search.c8
-rw-r--r--db2/btree/bt_split.c61
-rw-r--r--db2/btree/bt_stat.c15
11 files changed, 104 insertions, 103 deletions
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, data, op, flags)
__data.size = data->size;
if (LF_ISSET(BI_DELETED)) {
+ B_TSET(__bk.type, B_KEYDATA, 1);
__bk.len = __data.size;
- __bk.deleted = 1;
- __bk.type = B_KEYDATA;
__hdr.data = &__bk;
__hdr.size = SSZA(BKEYDATA, data);
ret = __db_pitem(dbp, h, indx,
@@ -687,10 +684,10 @@ __bam_ndup(dbp, h, indx)
if (indx >= NUM_ENT(h) || h->inp[first] != h->inp[indx])
break;
bk = GET_BKEYDATA(h, indx);
- sz += bk->type == B_KEYDATA ?
+ sz += B_TYPE(bk->type) == B_KEYDATA ?
BKEYDATA_PSIZE(bk->len) : BOVERFLOW_PSIZE;
bk = GET_BKEYDATA(h, indx + O_INDX);
- sz += bk->type == B_KEYDATA ?
+ sz += B_TYPE(bk->type) == B_KEYDATA ?
BKEYDATA_PSIZE(bk->len) : BOVERFLOW_PSIZE;
}
@@ -716,7 +713,7 @@ __bam_ndup(dbp, h, indx)
/* Copy the entry to the new page. */
bk = GET_BKEYDATA(h, indx);
hdr.data = bk;
- hdr.size = bk->type == B_KEYDATA ?
+ hdr.size = B_TYPE(bk->type) == B_KEYDATA ?
BKEYDATA_SIZE(bk->len) : BOVERFLOW_SIZE;
if ((ret =
__db_pitem(dbp, cp, cpindx, hdr.size, &hdr, NULL)) != 0)
@@ -743,8 +740,7 @@ __bam_ndup(dbp, h, indx)
}
/* Put in a new data item that points to the duplicates page. */
- bo.deleted = 0;
- bo.type = B_DUPLICATE;
+ B_TSET(bo.type, B_DUPLICATE, 0);
bo.pgno = cp->pgno;
bo.tlen = 0;
@@ -828,14 +824,14 @@ __bam_partial(dbp, dbt, h, indx)
*/
if (indx < NUM_ENT(h)) {
bk = GET_BKEYDATA(h, indx + (TYPE(h) == P_LBTREE ? O_INDX : 0));
- if (bk->type == B_OVERFLOW) {
+ if (B_TYPE(bk->type) == B_OVERFLOW) {
bo = (BOVERFLOW *)bk;
nbytes = bo->tlen;
} else
nbytes = bk->len;
} else {
bk = &tbk;
- bk->type = B_KEYDATA;
+ B_TSET(bk->type, B_KEYDATA, 0);
nbytes = bk->len = 0;
}
nbytes += dbt->doff + dbt->size + dbt->dlen;
@@ -856,7 +852,7 @@ __bam_partial(dbp, dbt, h, indx)
memset(t->bt_rdata.data, 0, nbytes);
tlen = 0;
- if (bk->type == B_OVERFLOW) {
+ if (B_TYPE(bk->type) == B_OVERFLOW) {
/* Take up to doff bytes from the record. */
memset(&copy, 0, sizeof(copy));
if ((ret = __db_goff(dbp, &copy, bo->tlen,
diff --git a/db2/btree/bt_rec.c b/db2/btree/bt_rec.c
index d4bc7f6824..bf48e01d54 100644
--- a/db2/btree/bt_rec.c
+++ b/db2/btree/bt_rec.c
@@ -8,7 +8,7 @@
#include "config.h"
#ifndef lint
-static const char sccsid[] = "@(#)bt_rec.c 10.11 (Sleepycat) 8/22/97";
+static const char sccsid[] = "@(#)bt_rec.c 10.13 (Sleepycat) 9/3/97";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -60,7 +60,7 @@ __bam_pg_alloc_recover(logp, dbtp, lsnp, redo, info)
* Fix up the allocated page. If we're redoing the operation, we have
* to get the page (creating it if it doesn't exist), and update its
* LSN. If we're undoing the operation, we have to reset the page's
- * LSN and put it on the free list.
+ * LSN and put it on the free list.
*
* Fix up the metadata page. If we're redoing the operation, we have
* to get the metadata page and update its LSN and its free pointer.
@@ -749,13 +749,13 @@ __bam_cdel_recover(logp, dbtp, lsnp, redo, info)
cmp_p = log_compare(&LSN(pagep), &argp->lsn);
if (cmp_p == 0 && redo) {
/* Need to redo update described. */
- GET_BKEYDATA(pagep, argp->indx + O_INDX)->deleted = 1;
+ B_DSET(GET_BKEYDATA(pagep, argp->indx + O_INDX)->type);
LSN(pagep) = *lsnp;
modified = 1;
} else if (cmp_n == 0 && !redo) {
/* Need to undo update described. */
- GET_BKEYDATA(pagep, argp->indx + O_INDX)->deleted = 0;
+ B_DCLR(GET_BKEYDATA(pagep, argp->indx + O_INDX)->type);
LSN(pagep) = argp->lsn;
modified = 1;
diff --git a/db2/btree/bt_recno.c b/db2/btree/bt_recno.c
index cd8872a064..42ef9cc30d 100644
--- a/db2/btree/bt_recno.c
+++ b/db2/btree/bt_recno.c
@@ -8,7 +8,7 @@
#include "config.h"
#ifndef lint
-static const char sccsid[] = "@(#)bt_recno.c 10.12 (Sleepycat) 8/25/97";
+static const char sccsid[] = "@(#)bt_recno.c 10.15 (Sleepycat) 9/3/97";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -246,7 +246,7 @@ __ram_get(argdbp, txn, key, data, flags)
indx = t->bt_csp->indx;
/* 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;
}
@@ -981,7 +981,7 @@ __ram_writeback(dbp)
if ((ret =
__db_write(fd, pad, rp->re_len, &nw)) != 0)
goto err;
- if (nw != (ssize_t) rp->re_len) {
+ if (nw != (ssize_t)rp->re_len) {
ret = EIO;
goto err;
}
diff --git a/db2/btree/bt_search.c b/db2/btree/bt_search.c
index d5f20d4c61..fa3e018313 100644
--- a/db2/btree/bt_search.c
+++ b/db2/btree/bt_search.c
@@ -47,7 +47,7 @@
#include "config.h"
#ifndef lint
-static const char sccsid[] = "@(#)bt_search.c 10.6 (Sleepycat) 8/22/97";
+static const char sccsid[] = "@(#)bt_search.c 10.7 (Sleepycat) 9/3/97";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -258,17 +258,17 @@ match: *exactp = 1;
*/
if (LF_ISSET(S_DELNO)) {
if (LF_ISSET(S_DUPLAST))
- while (GET_BKEYDATA(h, indx + O_INDX)->deleted &&
+ while (B_DISSET(GET_BKEYDATA(h, indx + O_INDX)->type) &&
indx > 0 &&
h->inp[indx] == h->inp[indx - P_INDX])
indx -= P_INDX;
else
- while (GET_BKEYDATA(h, indx + O_INDX)->deleted &&
+ while (B_DISSET(GET_BKEYDATA(h, indx + O_INDX)->type) &&
indx < (db_indx_t)(NUM_ENT(h) - P_INDX) &&
h->inp[indx] == h->inp[indx + P_INDX])
indx += P_INDX;
- if (GET_BKEYDATA(h, indx + O_INDX)->deleted)
+ if (B_DISSET(GET_BKEYDATA(h, indx + O_INDX)->type))
goto notfound;
}
diff --git a/db2/btree/bt_split.c b/db2/btree/bt_split.c
index 89cfcb5a2e..25cfacc4d0 100644
--- a/db2/btree/bt_split.c
+++ b/db2/btree/bt_split.c
@@ -44,7 +44,7 @@
#include "config.h"
#ifndef lint
-static const char sccsid[] = "@(#)bt_split.c 10.12 (Sleepycat) 8/24/97";
+static const char sccsid[] = "@(#)bt_split.c 10.14 (Sleepycat) 9/3/97";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -394,8 +394,7 @@ __bam_broot(dbp, rootp, lp, rp)
* level of the tree is never used, so it doesn't need to be filled in.
*/
bi.len = 0;
- bi.deleted = 0;
- bi.type = B_KEYDATA;
+ B_TSET(bi.type, B_KEYDATA, 0);
bi.pgno = lp->pgno;
if (F_ISSET(dbp, DB_BT_RECNUM)) {
bi.nrecs = __bam_total(lp);
@@ -405,7 +404,7 @@ __bam_broot(dbp, rootp, lp, rp)
hdr.data = &bi;
hdr.size = SSZA(BINTERNAL, data);
memset(&data, 0, sizeof(data));
- data.data = (char *) "";
+ data.data = (char *)"";
data.size = 0;
if ((ret =
__db_pitem(dbp, rootp, 0, BINTERNAL_SIZE(0), &hdr, &data)) != 0)
@@ -417,8 +416,7 @@ __bam_broot(dbp, rootp, lp, rp)
child_bi = GET_BINTERNAL(rp, 0);
bi.len = child_bi->len;
- bi.deleted = 0;
- bi.type = child_bi->type;
+ B_TSET(bi.type, child_bi->type, 0);
bi.pgno = rp->pgno;
if (F_ISSET(dbp, DB_BT_RECNUM)) {
bi.nrecs = __bam_total(rp);
@@ -433,18 +431,17 @@ __bam_broot(dbp, rootp, lp, rp)
return (ret);
/* Increment the overflow ref count. */
- if (child_bi->type == B_OVERFLOW && (ret =
+ if (B_TYPE(child_bi->type) == B_OVERFLOW && (ret =
__db_ioff(dbp, ((BOVERFLOW *)(child_bi->data))->pgno)) != 0)
return (ret);
break;
case P_LBTREE:
/* Copy the first key of the child page onto the root page. */
child_bk = GET_BKEYDATA(rp, 0);
- switch (child_bk->type) {
+ switch (B_TYPE(child_bk->type)) {
case B_KEYDATA:
bi.len = child_bk->len;
- bi.deleted = 0;
- bi.type = child_bk->type;
+ B_TSET(bi.type, child_bk->type, 0);
bi.pgno = rp->pgno;
if (F_ISSET(dbp, DB_BT_RECNUM)) {
bi.nrecs = __bam_total(rp);
@@ -461,8 +458,7 @@ __bam_broot(dbp, rootp, lp, rp)
case B_DUPLICATE:
case B_OVERFLOW:
bi.len = BOVERFLOW_SIZE;
- bi.deleted = 0;
- bi.type = child_bk->type;
+ B_TSET(bi.type, child_bk->type, 0);
bi.pgno = rp->pgno;
if (F_ISSET(dbp, DB_BT_RECNUM)) {
bi.nrecs = __bam_total(rp);
@@ -477,7 +473,7 @@ __bam_broot(dbp, rootp, lp, rp)
return (ret);
/* Increment the overflow ref count. */
- if (child_bk->type == B_OVERFLOW && (ret =
+ if (B_TYPE(child_bk->type) == B_OVERFLOW && (ret =
__db_ioff(dbp, ((BOVERFLOW *)child_bk)->pgno)) != 0)
return (ret);
break;
@@ -594,8 +590,7 @@ __bam_pinsert(dbp, parent, lchild, rchild)
/* Add a new record for the right page. */
bi.len = child_bi->len;
- bi.deleted = 0;
- bi.type = child_bi->type;
+ B_TSET(bi.type, child_bi->type, 0);
bi.pgno = rchild->pgno;
bi.nrecs = nrecs;
memset(&hdr, 0, sizeof(hdr));
@@ -609,13 +604,13 @@ __bam_pinsert(dbp, parent, lchild, rchild)
return (ret);
/* Increment the overflow ref count. */
- if (child_bi->type == B_OVERFLOW && (ret =
+ if (B_TYPE(child_bi->type) == B_OVERFLOW && (ret =
__db_ioff(dbp, ((BOVERFLOW *)(child_bi->data))->pgno)) != 0)
return (ret);
break;
case P_LBTREE:
child_bk = GET_BKEYDATA(rchild, 0);
- switch (child_bk->type) {
+ switch (B_TYPE(child_bk->type)) {
case B_KEYDATA:
nbytes = BINTERNAL_PSIZE(child_bk->len);
nksize = child_bk->len;
@@ -624,7 +619,7 @@ __bam_pinsert(dbp, parent, lchild, rchild)
if (ppage->prev_pgno == PGNO_INVALID && off <= 1)
goto noprefix;
tmp_bk = GET_BKEYDATA(lchild, NUM_ENT(lchild) - P_INDX);
- if (tmp_bk->type != B_KEYDATA)
+ if (B_TYPE(tmp_bk->type) != B_KEYDATA)
goto noprefix;
memset(&a, 0, sizeof(a));
a.size = tmp_bk->len;
@@ -643,8 +638,7 @@ noprefix: nksize = child_bk->len;
return (DB_NEEDSPLIT);
bi.len = nksize;
- bi.deleted = 0;
- bi.type = child_bk->type;
+ B_TSET(bi.type, child_bk->type, 0);
bi.pgno = rchild->pgno;
bi.nrecs = nrecs;
memset(&hdr, 0, sizeof(hdr));
@@ -665,8 +659,7 @@ noprefix: nksize = child_bk->len;
return (DB_NEEDSPLIT);
bi.len = BOVERFLOW_SIZE;
- bi.deleted = 0;
- bi.type = child_bk->type;
+ B_TSET(bi.type, child_bk->type, 0);
bi.pgno = rchild->pgno;
bi.nrecs = nrecs;
memset(&hdr, 0, sizeof(hdr));
@@ -680,7 +673,7 @@ noprefix: nksize = child_bk->len;
return (ret);
/* Increment the overflow ref count. */
- if (child_bk->type == B_OVERFLOW && (ret =
+ if (B_TYPE(child_bk->type) == B_OVERFLOW && (ret =
__db_ioff(dbp, ((BOVERFLOW *)child_bk)->pgno)) != 0)
return (ret);
break;
@@ -796,21 +789,21 @@ __bam_psplit(dbp, cp, lp, rp, cleft)
for (nbytes = 0, off = 0; off < top && nbytes < half; ++off)
switch (TYPE(pp)) {
case P_IBTREE:
- if (GET_BINTERNAL(pp, off)->type == B_KEYDATA)
+ if (B_TYPE(GET_BINTERNAL(pp, off)->type) == B_KEYDATA)
nbytes +=
BINTERNAL_SIZE(GET_BINTERNAL(pp, off)->len);
else
nbytes += BINTERNAL_SIZE(BOVERFLOW_SIZE);
break;
case P_LBTREE:
- if (GET_BKEYDATA(pp, off)->type == B_KEYDATA)
+ if (B_TYPE(GET_BKEYDATA(pp, off)->type) == B_KEYDATA)
nbytes +=
BKEYDATA_SIZE(GET_BKEYDATA(pp, off)->len);
else
nbytes += BOVERFLOW_SIZE;
++off;
- if (GET_BKEYDATA(pp, off)->type == B_KEYDATA)
+ if (B_TYPE(GET_BKEYDATA(pp, off)->type) == B_KEYDATA)
nbytes +=
BKEYDATA_SIZE(GET_BKEYDATA(pp, off)->len);
else
@@ -832,9 +825,9 @@ sort: splitp = off;
* it's a big key, try and find something close by that's not.
*/
if (TYPE(pp) == P_IBTREE)
- isbigkey = GET_BINTERNAL(pp, off)->type != B_KEYDATA;
+ isbigkey = B_TYPE(GET_BINTERNAL(pp, off)->type) != B_KEYDATA;
else if (TYPE(pp) == P_LBTREE)
- isbigkey = GET_BKEYDATA(pp, off)->type != B_KEYDATA;
+ isbigkey = B_TYPE(GET_BKEYDATA(pp, off)->type) != B_KEYDATA;
else
isbigkey = 0;
if (isbigkey)
@@ -842,8 +835,8 @@ sort: splitp = off;
off = splitp + cnt * adjust;
if (off < (db_indx_t)NUM_ENT(pp) &&
((TYPE(pp) == P_IBTREE &&
- GET_BINTERNAL(pp, off)->type == B_KEYDATA) ||
- GET_BKEYDATA(pp, off)->type == B_KEYDATA)) {
+ B_TYPE(GET_BINTERNAL(pp,off)->type) == B_KEYDATA) ||
+ B_TYPE(GET_BKEYDATA(pp, off)->type) == B_KEYDATA)) {
splitp = off;
break;
}
@@ -851,8 +844,8 @@ sort: splitp = off;
continue;
off = splitp - cnt * adjust;
if (TYPE(pp) == P_IBTREE ?
- GET_BINTERNAL(pp, off)->type == B_KEYDATA :
- GET_BKEYDATA(pp, off)->type == B_KEYDATA) {
+ B_TYPE(GET_BINTERNAL(pp, off)->type) == B_KEYDATA :
+ B_TYPE(GET_BKEYDATA(pp, off)->type) == B_KEYDATA) {
splitp = off;
break;
}
@@ -915,7 +908,7 @@ __bam_copy(dbp, pp, cp, nxt, stop)
for (dup = off = 0; nxt < stop; ++nxt, ++NUM_ENT(cp), ++off) {
switch (TYPE(pp)) {
case P_IBTREE:
- if (GET_BINTERNAL(pp, nxt)->type == B_KEYDATA)
+ if (B_TYPE(GET_BINTERNAL(pp, nxt)->type) == B_KEYDATA)
nbytes =
BINTERNAL_SIZE(GET_BINTERNAL(pp, nxt)->len);
else
@@ -933,7 +926,7 @@ __bam_copy(dbp, pp, cp, nxt, stop)
}
/* FALLTHROUGH */
case P_LRECNO:
- if (GET_BKEYDATA(pp, nxt)->type == B_KEYDATA)
+ if (B_TYPE(GET_BKEYDATA(pp, nxt)->type) == B_KEYDATA)
nbytes =
BKEYDATA_SIZE(GET_BKEYDATA(pp, nxt)->len);
else
diff --git a/db2/btree/bt_stat.c b/db2/btree/bt_stat.c
index ba71ea616d..ab3bc4c431 100644
--- a/db2/btree/bt_stat.c
+++ b/db2/btree/bt_stat.c
@@ -8,7 +8,7 @@
#include "config.h"
#ifndef lint
-static const char sccsid[] = "@(#)bt_stat.c 10.11 (Sleepycat) 8/19/97";
+static const char sccsid[] = "@(#)bt_stat.c 10.12 (Sleepycat) 9/3/97";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -140,6 +140,11 @@ __bam_stat(argdbp, spp, db_malloc, flags)
(void)memp_fput(dbp->mpf, meta, 0);
(void)__BT_TLPUT(dbp, lock);
+ /* Determine the last page of the database. */
+ if ((ret = memp_fget(dbp->mpf, &lastpgno, DB_MPOOL_LAST, &h)) != 0)
+ goto err;
+ (void)memp_fput(dbp->mpf, h, 0);
+
/* Get the root page. */
pgno = PGNO_ROOT;
if ((ret = __bam_lget(dbp, 0, PGNO_ROOT, DB_LOCK_READ, &lock)) != 0)
@@ -152,13 +157,7 @@ __bam_stat(argdbp, spp, db_malloc, flags)
/* Get the levels from the root page. */
sp->bt_levels = h->level;
- /*
- * Determine the last page of the database, then walk it, counting
- * things.
- */
- if ((ret = memp_fget(dbp->mpf, &lastpgno, DB_MPOOL_LAST, &h)) != 0)
- goto err;
- (void)memp_fput(dbp->mpf, h, 0);
+ /* Walk the page list, counting things. */
for (;;) {
switch (TYPE(h)) {
case P_INVALID: