diff options
Diffstat (limited to 'db2/btree')
-rw-r--r-- | db2/btree/bt_close.c | 10 | ||||
-rw-r--r-- | db2/btree/bt_compare.c | 6 | ||||
-rw-r--r-- | db2/btree/bt_conv.c | 18 | ||||
-rw-r--r-- | db2/btree/bt_cursor.c | 26 | ||||
-rw-r--r-- | db2/btree/bt_delete.c | 17 | ||||
-rw-r--r-- | db2/btree/bt_put.c | 32 | ||||
-rw-r--r-- | db2/btree/bt_rec.c | 8 | ||||
-rw-r--r-- | db2/btree/bt_recno.c | 6 | ||||
-rw-r--r-- | db2/btree/bt_search.c | 8 | ||||
-rw-r--r-- | db2/btree/bt_split.c | 61 | ||||
-rw-r--r-- | db2/btree/bt_stat.c | 15 |
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(©, 0, sizeof(copy)); if ((ret = __db_goff(dbp, ©, 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: |