#include "config.h"
#ifndef lint
-static const char sccsid[] = "@(#)hash.c 10.33 (Sleepycat) 11/2/97";
+static const char sccsid[] = "@(#)hash.c 10.36 (Sleepycat) 1/8/98";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
} else /* Case 1 */
F_SET(hcp, H_DELETED);
if (chg_pgno != PGNO_INVALID)
- __ham_c_update(hashp, hcp, chg_pgno, 0, 0, 1);
+ __ham_c_update(hcp, chg_pgno, 0, 0, 1);
} else if (F_ISSET(hcp, H_ISDUP)) { /* on page */
if (hcp->dup_off == 0 && DUP_SIZE(hcp->dup_len) ==
LEN_HDATA(hcp->pagep, hashp->hdr->pagesize, hcp->bndx))
ret = __ham_replpair(hashp, hcp, &repldbt, 0);
hcp->dup_tlen -= DUP_SIZE(hcp->dup_len);
F_SET(hcp, H_DELETED);
- __ham_c_update(hashp, hcp, hcp->pgno,
+ __ham_c_update(hcp, hcp->pgno,
DUP_SIZE(hcp->dup_len), 0, 1);
}
* if the next doubling is going to be big (more than 8
* pages), we have some extra pages around.
*/
- if (hashp->hdr->max_bucket + 1 >= 8 &&
+ if (hashp->hdr->max_bucket + 1 >= 8 &&
hashp->hdr->spares[hashp->hdr->ovfl_point] <
- hashp->hdr->spares[hashp->hdr->ovfl_point - 1] +
+ hashp->hdr->spares[hashp->hdr->ovfl_point - 1] +
hashp->hdr->ovfl_point + 1)
__ham_init_ovflpages(hashp);
}
* added (add == 1) or deleted (add == 0).
* dup indicates if the addition occurred into a duplicate set.
*
- * PUBLIC: void __ham_c_update __P((HTAB *,
- * PUBLIC: HASH_CURSOR *, db_pgno_t, u_int32_t, int, int));
+ * PUBLIC: void __ham_c_update
+ * PUBLIC: __P((HASH_CURSOR *, db_pgno_t, u_int32_t, int, int));
*/
void
-__ham_c_update(hashp, hcp, chg_pgno, len, add, dup)
- HTAB *hashp;
+__ham_c_update(hcp, chg_pgno, len, add, is_dup)
HASH_CURSOR *hcp;
db_pgno_t chg_pgno;
u_int32_t len;
- int add;
- int dup;
+ int add, is_dup;
{
DBC *cp;
HTAB *hp;
int page_deleted;
/*
- * Regular adds are always at the end of a given page,
- * so we never have to adjust anyone's cursor after
- * a regular add.
+ * Regular adds are always at the end of a given page, so we never
+ * have to adjust anyone's cursor after a regular add.
*/
- if (!dup && add)
+ if (!is_dup && add)
return;
/*
* Determine if a page was deleted. If this is a regular update
- * (i.e., not dup) then the deleted page's number will be that in
+ * (i.e., not is_dup) then the deleted page's number will be that in
* chg_pgno, and the pgno in the cursor will be different. If this
* was an onpage-duplicate, then the same conditions apply. If this
* was an off-page duplicate, then we need to verify if hcp->dpgno
* is the same (no delete) or different (delete) than chg_pgno.
*/
- if (!dup || hcp->dpgno == PGNO_INVALID)
+ if (!is_dup || hcp->dpgno == PGNO_INVALID)
page_deleted =
chg_pgno != PGNO_INVALID && chg_pgno != hcp->pgno;
else
lcp = (HASH_CURSOR *)cp->internal;
- if (!dup && lcp->pgno != chg_pgno)
- continue;
-
- if (dup && F_ISSET(hcp, H_DELETED) && lcp->pgno != chg_pgno)
+ if (!is_dup && lcp->pgno != chg_pgno)
continue;
- if (dup && !F_ISSET(hcp, H_DELETED) && lcp->dpgno != chg_pgno)
- continue;
+ if (is_dup) {
+ if (F_ISSET(hcp, H_DELETED) && lcp->pgno != chg_pgno)
+ continue;
+ if (!F_ISSET(hcp, H_DELETED) && lcp->dpgno != chg_pgno)
+ continue;
+ }
if (page_deleted) {
- if (dup) {
+ if (is_dup) {
lcp->dpgno = hcp->dpgno;
lcp->dndx = hcp->dndx;
} else {
continue;
}
- if (!dup && lcp->bndx > hcp->bndx)
+ if (!is_dup && lcp->bndx > hcp->bndx)
lcp->bndx--;
- else if (!dup && lcp->bndx == hcp->bndx)
+ else if (!is_dup && lcp->bndx == hcp->bndx)
F_SET(lcp, H_DELETED);
- else if (dup && lcp->bndx == hcp->bndx) {
+ else if (is_dup && lcp->bndx == hcp->bndx) {
/* Assign dpgno in case there was page conversion. */
lcp->dpgno = hcp->dpgno;
if (add && lcp->dndx >= hcp->dndx )
* PUBLIC: int __ham_insdel_log
* PUBLIC: __P((DB_LOG *, DB_TXN *, DB_LSN *, u_int32_t,
* PUBLIC: u_int32_t, u_int32_t, db_pgno_t, u_int32_t,
- * PUBLIC: DB_LSN *, DBT *, DBT *));
+ * PUBLIC: DB_LSN *, const DBT *, const DBT *));
*/
int __ham_insdel_log(logp, txnid, ret_lsnp, flags,
opcode, fileid, pgno, ndx, pagelsn, key,
db_pgno_t pgno;
u_int32_t ndx;
DB_LSN * pagelsn;
- DBT *key;
- DBT *data;
+ const DBT *key;
+ const DBT *data;
{
DBT logrec;
DB_LSN *lsnp, null_lsn;
/*
* PUBLIC: int __ham_splitdata_log
* PUBLIC: __P((DB_LOG *, DB_TXN *, DB_LSN *, u_int32_t,
- * PUBLIC: u_int32_t, u_int32_t, db_pgno_t, DBT *,
+ * PUBLIC: u_int32_t, u_int32_t, db_pgno_t, const DBT *,
* PUBLIC: DB_LSN *));
*/
int __ham_splitdata_log(logp, txnid, ret_lsnp, flags,
u_int32_t fileid;
u_int32_t opcode;
db_pgno_t pgno;
- DBT *pageimage;
+ const DBT *pageimage;
DB_LSN * pagelsn;
{
DBT logrec;
* PUBLIC: int __ham_replace_log
* PUBLIC: __P((DB_LOG *, DB_TXN *, DB_LSN *, u_int32_t,
* PUBLIC: u_int32_t, db_pgno_t, u_int32_t, DB_LSN *,
- * PUBLIC: int32_t, DBT *, DBT *, u_int32_t));
+ * PUBLIC: int32_t, const DBT *, const DBT *, u_int32_t));
*/
int __ham_replace_log(logp, txnid, ret_lsnp, flags,
fileid, pgno, ndx, pagelsn, off, olditem,
u_int32_t ndx;
DB_LSN * pagelsn;
int32_t off;
- DBT *olditem;
- DBT *newitem;
+ const DBT *olditem;
+ const DBT *newitem;
u_int32_t makedup;
{
DBT logrec;
* PUBLIC: int __ham_copypage_log
* PUBLIC: __P((DB_LOG *, DB_TXN *, DB_LSN *, u_int32_t,
* PUBLIC: u_int32_t, db_pgno_t, DB_LSN *, db_pgno_t,
- * PUBLIC: DB_LSN *, db_pgno_t, DB_LSN *, DBT *));
+ * PUBLIC: DB_LSN *, db_pgno_t, DB_LSN *, const DBT *));
*/
int __ham_copypage_log(logp, txnid, ret_lsnp, flags,
fileid, pgno, pagelsn, next_pgno, nextlsn, nnext_pgno,
DB_LSN * nextlsn;
db_pgno_t nnext_pgno;
DB_LSN * nnextlsn;
- DBT *page;
+ const DBT *page;
{
DBT logrec;
DB_LSN *lsnp, null_lsn;
#include "config.h"
#ifndef lint
-static const char sccsid[] = "@(#)hash_dup.c 10.8 (Sleepycat) 10/14/97";
+static const char sccsid[] = "@(#)hash_dup.c 10.10 (Sleepycat) 1/8/98";
#endif /* not lint */
/*
ret = __ham_replpair(hashp, hcp, &tmp_val, 0);
if (ret == 0)
ret = __ham_dirty_page(hashp, hcp->pagep);
- __ham_c_update(hashp, hcp, hcp->pgno, tmp_val.size, 1, 1);
+ __ham_c_update(hcp, hcp->pgno, tmp_val.size, 1, 1);
return (ret);
}
ret = __db_dput(hashp->dbp,
nval, &hcp->dpagep, &hcp->dndx, __ham_overflow_page);
hcp->pgno = PGNO(hcp->pagep);
- __ham_c_update(hashp, hcp, hcp->pgno, nval->size, 1, 1);
+ __ham_c_update(hcp, hcp->pgno, nval->size, 1, 1);
return (ret);
}
}
static int
-__ham_make_dup(notdup, dup, bufp, sizep)
+__ham_make_dup(notdup, duplicate, bufp, sizep)
const DBT *notdup;
- DBT *dup;
+ DBT *duplicate;
void **bufp;
u_int32_t *sizep;
{
item_size = (db_indx_t)notdup->size;
tsize = DUP_SIZE(item_size);
- if ((ret = __ham_init_dbt(dup, tsize, bufp, sizep)) != 0)
+ if ((ret = __ham_init_dbt(duplicate, tsize, bufp, sizep)) != 0)
return (ret);
- dup->dlen = 0;
- dup->flags = notdup->flags;
- F_SET(dup, DB_DBT_PARTIAL);
+ duplicate->dlen = 0;
+ duplicate->flags = notdup->flags;
+ F_SET(duplicate, DB_DBT_PARTIAL);
- p = dup->data;
+ p = duplicate->data;
memcpy(p, &item_size, sizeof(db_indx_t));
p += sizeof(db_indx_t);
memcpy(p, notdup->data, notdup->size);
p += notdup->size;
memcpy(p, &item_size, sizeof(db_indx_t));
- dup->doff = 0;
- dup->dlen = notdup->size;
+ duplicate->doff = 0;
+ duplicate->dlen = notdup->size;
return (0);
}
#include "config.h"
#ifndef lint
-static const char sccsid[] = "@(#)hash_page.c 10.29 (Sleepycat) 11/2/97";
+static const char sccsid[] = "@(#)hash_page.c 10.31 (Sleepycat) 1/8/98";
#endif /* not lint */
/*
chg_pgno = cursorp->pgno;
ret = __ham_dirty_page(hashp, p);
}
- __ham_c_update(hashp, cursorp, chg_pgno, 0, 0, 0);
+ __ham_c_update(cursorp, chg_pgno, 0, 0, 0);
/*
* Since we just deleted a pair from the master page, anything
const DBT *key, *val;
int type;
{
- DBT *pkey, *pdata, key_dbt, data_dbt;
+ const DBT *pkey, *pdata;
+ DBT key_dbt, data_dbt;
DB_LSN new_lsn;
HOFFPAGE doff, koff;
db_pgno_t next_pgno;
pkey = &key_dbt;
key_type = H_OFFPAGE;
} else {
- pkey = (DBT *)key;
+ pkey = key;
key_type = H_KEYDATA;
}
pdata = &data_dbt;
data_type = H_OFFPAGE;
} else {
- pdata = (DBT *)val;
+ pdata = val;
data_type = type;
}
db_pgno_t last_pgno, new_pgno;
u_int32_t i, curpages, numpages;
- curpages = hp->hdr->spares[hp->hdr->ovfl_point] -
+ curpages = hp->hdr->spares[hp->hdr->ovfl_point] -
hp->hdr->spares[hp->hdr->ovfl_point - 1];
numpages = hp->hdr->ovfl_point + 1 - curpages;
#include "config.h"
#ifndef lint
-static const char sccsid[] = "@(#)hash_rec.c 10.14 (Sleepycat) 11/2/97";
+static const char sccsid[] = "@(#)hash_rec.c 10.15 (Sleepycat) 12/4/97";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
/*
* __ham_copypage_recover --
* Recovery function for copypage.
- *
+ *
* PUBLIC: int __ham_copypage_recover
* PUBLIC: __P((DB_LOG *, DBT *, DB_LSN *, int, void *));
*/