Lines Matching refs:hcp

95 	HASH_CURSOR *hcp;
100 hcp = (HASH_CURSOR *)dbc->internal;
102 if (F_ISSET(hcp, H_DELETED))
104 F_CLR(hcp, H_OK | H_NOMORE);
111 if (hcp->seek_size && hcp->seek_found_page == PGNO_INVALID
112 && hcp->seek_size < P_FREESPACE(hcp->pagep))
113 hcp->seek_found_page = hcp->pgno;
116 if (F_ISSET(hcp, H_ISDUP) && hcp->dpgno == PGNO_INVALID)
122 memcpy(&hcp->dup_len,
123 HKEYDATA_DATA(H_PAIRDATA(hcp->pagep, hcp->bndx)) +
124 hcp->dup_off, sizeof(db_indx_t));
125 else if (F_ISSET(hcp, H_ISDUP)) {
127 if (hcp->dpagep == NULL && (ret = __ham_get_page(dbp,
128 hcp->dpgno, &hcp->dpagep)) != 0)
131 if (hcp->dndx >= NUM_ENT(hcp->dpagep)) {
132 if (NEXT_PGNO(hcp->dpagep) == PGNO_INVALID) {
133 if (F_ISSET(hcp, H_DUPONLY)) {
134 F_CLR(hcp, H_OK);
135 F_SET(hcp, H_NOMORE);
139 hcp->dpagep, 0)) != 0)
141 F_CLR(hcp, H_ISDUP);
142 hcp->dpagep = NULL;
143 hcp->dpgno = PGNO_INVALID;
144 hcp->dndx = NDX_INVALID;
145 hcp->bndx++;
147 NEXT_PGNO(hcp->dpagep), 0, H_ISDUP)) != 0)
152 if (hcp->bndx >= (db_indx_t)H_NUMPAIRS(hcp->pagep)) {
154 if (NEXT_PGNO(hcp->pagep) == PGNO_INVALID) {
155 F_SET(hcp, H_NOMORE);
156 if (hcp->dpagep != NULL &&
157 (ret = __ham_put_page(dbp, hcp->dpagep, 0)) != 0)
159 hcp->dpgno = PGNO_INVALID;
162 next_pgno = NEXT_PGNO(hcp->pagep);
163 hcp->bndx = 0;
168 F_SET(hcp, H_OK);
179 HASH_CURSOR *hcp;
185 hcp = (HASH_CURSOR *)dbc->internal;
186 if (hcp->pagep != NULL)
187 ret = __ham_put_page(dbp, hcp->pagep, 0);
188 if (ret == 0 && hcp->dpagep != NULL)
189 ret = __ham_put_page(dbp, hcp->dpagep, 0);
191 __ham_item_init(hcp);
199 __ham_item_init(hcp)
200 HASH_CURSOR *hcp;
206 if (hcp->lock && hcp->dbc->txn == NULL)
207 (void)lock_put(hcp->dbc->dbp->dbenv->lk_info, hcp->lock);
214 hcp->bucket = BUCKET_INVALID;
215 hcp->lbucket = BUCKET_INVALID;
216 hcp->lock = 0;
217 hcp->pagep = NULL;
218 hcp->pgno = PGNO_INVALID;
219 hcp->bndx = NDX_INVALID;
220 hcp->dpagep = NULL;
221 hcp->dpgno = PGNO_INVALID;
222 hcp->dndx = NDX_INVALID;
223 hcp->dup_off = 0;
224 hcp->dup_len = 0;
225 hcp->dup_tlen = 0;
226 hcp->seek_size = 0;
227 hcp->seek_found_page = PGNO_INVALID;
228 hcp->flags = 0;
240 HASH_CURSOR *hcp;
244 hcp = (HASH_CURSOR *)dbc->internal;
247 if (hcp->pagep)
248 ret = __ham_put_page(dbp, hcp->pagep,
249 dirty && hcp->dpagep == NULL);
250 hcp->pagep = NULL;
252 if (hcp->dpagep)
253 t_ret = __ham_put_page(dbp, hcp->dpagep, dirty);
254 hcp->dpagep = NULL;
276 HASH_CURSOR *hcp;
279 hcp = (HASH_CURSOR *)dbc->internal;
283 hcp->bucket = hcp->hdr->max_bucket;
284 F_SET(hcp, H_OK);
296 HASH_CURSOR *hcp;
299 hcp = (HASH_CURSOR *)dbc->internal;
302 F_SET(hcp, H_OK);
303 hcp->bucket = 0;
321 HASH_CURSOR *hcp;
326 hcp = (HASH_CURSOR *)dbc->internal;
336 F_CLR(hcp, H_OK | H_NOMORE | H_DELETED);
343 if (F_ISSET(hcp, H_ISDUP)) {
344 if (hcp->dpgno == PGNO_INVALID) {
346 if (hcp->dup_off != 0)
351 h = hcp;
356 hcp->dup_off -=
357 DUP_SIZE(hcp->dup_len);
358 hcp->dndx--;
361 } else if (hcp->dndx > 0) { /* Duplicates are off-page. */
362 hcp->dndx--;
366 else if (PREV_PGNO(hcp->dpagep) == PGNO_INVALID) {
367 if (F_ISSET(hcp, H_DUPONLY)) {
368 F_CLR(hcp, H_OK);
369 F_SET(hcp, H_NOMORE);
372 F_CLR(hcp, H_ISDUP); /* End of dups */
373 hcp->dpgno = PGNO_INVALID;
374 if (hcp->dpagep != NULL)
376 hcp->dpagep, 0);
377 hcp->dpagep = NULL;
380 PREV_PGNO(hcp->dpagep), 0, H_ISDUP)) != 0)
383 hcp->dndx = NUM_ENT(hcp->pagep) - 1;
394 if (F_ISSET(hcp, H_DUPONLY)) {
395 F_CLR(hcp, H_OK);
396 F_SET(hcp, H_NOMORE);
400 if (hcp->bndx == 0) { /* Beginning of page. */
403 hcp->pgno = PREV_PGNO(hcp->pagep);
404 if (hcp->pgno == PGNO_INVALID) {
406 F_SET(hcp, H_NOMORE);
409 __ham_next_cpage(dbc, hcp->pgno, 0, 0)) != 0)
412 hcp->bndx = H_NUMPAIRS(hcp->pagep);
419 if (hcp->bndx == NDX_INVALID) {
420 if (hcp->pagep == NULL)
421 next_pgno = BUCKET_TO_PAGE(hcp, hcp->bucket);
428 got_page: next_pgno = NEXT_PGNO(hcp->pagep);
429 hcp->bndx = H_NUMPAIRS(hcp->pagep);
432 if (hcp->bndx == 0) {
434 F_SET(hcp, H_NOMORE);
439 hcp->bndx--;
454 HASH_CURSOR *hcp;
456 hcp = (HASH_CURSOR *)dbc->internal;
462 if (F_ISSET(hcp, H_DELETED)) {
463 if (hcp->bndx != NDX_INVALID &&
464 F_ISSET(hcp, H_ISDUP) &&
465 hcp->dpgno == PGNO_INVALID &&
466 hcp->dup_tlen == hcp->dup_off) {
467 if (F_ISSET(hcp, H_DUPONLY)) {
468 F_CLR(hcp, H_OK);
469 F_SET(hcp, H_NOMORE);
472 F_CLR(hcp, H_ISDUP);
473 hcp->dpgno = PGNO_INVALID;
474 hcp->bndx++;
476 } else if (!F_ISSET(hcp, H_ISDUP) &&
477 F_ISSET(hcp, H_DUPONLY)) {
478 F_CLR(hcp, H_OK);
479 F_SET(hcp, H_NOMORE);
482 F_CLR(hcp, H_DELETED);
483 } else if (hcp->bndx == NDX_INVALID) {
484 hcp->bndx = 0;
485 hcp->dpgno = PGNO_INVALID;
486 F_CLR(hcp, H_ISDUP);
487 } else if (F_ISSET(hcp, H_ISDUP) && hcp->dpgno != PGNO_INVALID)
488 hcp->dndx++;
489 else if (F_ISSET(hcp, H_ISDUP)) {
490 if (hcp->dup_off + DUP_SIZE(hcp->dup_len) >=
491 hcp->dup_tlen && F_ISSET(hcp, H_DUPONLY)) {
492 F_CLR(hcp, H_OK);
493 F_SET(hcp, H_NOMORE);
496 hcp->dndx++;
497 hcp->dup_off += DUP_SIZE(hcp->dup_len);
498 if (hcp->dup_off >= hcp->dup_tlen) {
499 F_CLR(hcp, H_ISDUP);
500 hcp->dpgno = PGNO_INVALID;
501 hcp->bndx++;
503 } else if (F_ISSET(hcp, H_DUPONLY)) {
504 F_CLR(hcp, H_OK);
505 F_SET(hcp, H_NOMORE);
508 hcp->bndx++;
605 HASH_CURSOR *hcp;
615 hcp = (HASH_CURSOR *)dbc->internal;
618 ndx = hcp->bndx;
619 if (hcp->pagep == NULL &&
620 (ret = __ham_get_page(dbp, hcp->pgno, &hcp->pagep)) != 0)
623 p = hcp->pagep;
652 F_CLR(hcp, H_ISDUP);
660 F_CLR(hcp, H_ISDUP);
671 LEN_HITEM(p, hcp->hdr->pagesize, H_KEYINDEX(ndx));
674 LEN_HITEM(p, hcp->hdr->pagesize, H_DATAINDEX(ndx));
695 --hcp->hdr->nelem;
728 key_dbt.size = hcp->hdr->pagesize;
750 memcpy(p, n_pagep, hcp->hdr->pagesize);
758 hcp->bndx = 0;
759 hcp->pgno = PGNO(p);
760 F_SET(hcp, H_DELETED);
802 hcp->pgno = NEXT_PGNO(p);
803 hcp->bndx = 0;
809 hcp->pagep = NULL;
827 F_SET(hcp, H_DELETED);
828 chg_pgno = hcp->pgno;
831 __ham_c_update(hcp, chg_pgno, 0, 0, 0);
835 * in hcp->dpgno should be cleared.
837 hcp->dpgno = PGNO_INVALID;
839 F_CLR(hcp, H_OK);
857 HASH_CURSOR *hcp;
877 hcp = (HASH_CURSOR *)dbc->internal;
890 hk = H_PAIRDATA(hcp->pagep, hcp->bndx);
896 len = LEN_HKEYDATA(hcp->pagep,
897 dbp->pgsize, H_DATAINDEX(hcp->bndx));
903 if (change > (int32_t)P_FREESPACE(hcp->pagep) || is_big) {
918 __db_ret(dbp, hcp->pagep, H_KEYINDEX(hcp->bndx),
932 if ((ret = __db_ret(dbp, hcp->pagep,
933 H_DATAINDEX(hcp->bndx), &tdata, &dbc->rdata.data,
975 beg = HKEYDATA_DATA(H_PAIRDATA(hcp->pagep, hcp->bndx));
987 dbc->txn, &new_lsn, 0, dbp->log_fileid, PGNO(hcp->pagep),
988 (u_int32_t)H_DATAINDEX(hcp->bndx), &LSN(hcp->pagep),
992 LSN(hcp->pagep) = new_lsn; /* Structure assignment. */
995 __ham_onpage_replace(hcp->pagep, dbp->pgsize,
996 (u_int32_t)H_DATAINDEX(hcp->bndx), (int32_t)dbt->doff, change, dbt);
1066 HASH_CURSOR *hcp;
1078 hcp = (HASH_CURSOR *)dbc->internal;
1082 bucket_pgno = BUCKET_TO_PAGE(hcp, obucket);
1085 if ((ret = __ham_new_page(dbp, BUCKET_TO_PAGE(hcp, nbucket), P_HASH,
1089 temp_pagep = hcp->split_buf;
1090 memcpy(temp_pagep, old_pagep, hcp->hdr->pagesize);
1093 page_dbt.size = hcp->hdr->pagesize;
1101 P_INIT(old_pagep, hcp->hdr->pagesize, PGNO(old_pagep), PGNO_INVALID,
1117 if (__ham_call_hash(hcp, key.data, key.size)
1128 len = LEN_HITEM(temp_pagep, hcp->hdr->pagesize,
1130 LEN_HITEM(temp_pagep, hcp->hdr->pagesize,
1136 page_dbt.size = hcp->hdr->pagesize;
1169 page_dbt.size = hcp->hdr->pagesize;
1195 page_dbt.size = hcp->hdr->pagesize;
1243 HASH_CURSOR *hcp;
1254 hcp = (HASH_CURSOR *)dbc->internal;
1257 if (hcp->pagep == NULL && (ret = __ham_get_page(dbp,
1258 hcp->seek_found_page != PGNO_INVALID ? hcp->seek_found_page :
1259 hcp->pgno, &hcp->pagep)) != 0)
1264 is_keybig = ISBIG(hcp, key->size);
1265 is_databig = ISBIG(hcp, val->size);
1274 while (H_NUMPAIRS(hcp->pagep) && NEXT_PGNO(hcp->pagep) !=
1281 if (P_FREESPACE(hcp->pagep) >= pairsize)
1283 next_pgno = NEXT_PGNO(hcp->pagep);
1292 if (P_FREESPACE(hcp->pagep) < pairsize) {
1295 hcp->pagep, 1, &hcp->pagep)) != 0)
1297 hcp->pgno = PGNO(hcp->pagep);
1303 hcp->bndx = H_NUMPAIRS(hcp->pagep);
1304 F_CLR(hcp, H_DELETED);
1350 dbp->log_fileid, PGNO(hcp->pagep),
1351 (u_int32_t)H_NUMPAIRS(hcp->pagep),
1352 &LSN(hcp->pagep), pkey, pdata)) != 0)
1356 LSN(hcp->pagep) = new_lsn; /* Structure assignment. */
1359 __ham_putitem(hcp->pagep, pkey, key_type);
1360 __ham_putitem(hcp->pagep, pdata, data_type);
1369 hcp->pgno = PGNO(hcp->pagep);
1375 hcp->hdr->nelem++;
1377 if (do_expand || (hcp->hdr->ffactor != 0 &&
1378 (u_int32_t)H_NUMPAIRS(hcp->pagep) > hcp->hdr->ffactor))
1379 F_SET(hcp, H_EXPAND);
1433 HASH_CURSOR *hcp;
1439 hcp = (HASH_CURSOR *)dbc->internal;
1460 hcp->stats.hash_overflows++;
1498 HASH_CURSOR *hcp;
1503 hcp = (HASH_CURSOR *)dbc->internal;
1505 DIRTY_META(dbp, hcp, ret);
1522 dbp->log_fileid, PGNO(pagep), hcp->hdr->last_freed,
1524 &LSN(pagep), &hcp->hdr->lsn)) != 0)
1527 hcp->hdr->lsn = new_lsn;
1543 NEXT_PGNO(pagep) = hcp->hdr->last_freed;
1544 hcp->hdr->last_freed = PGNO(pagep);
1609 HASH_CURSOR *hcp;
1618 hcp = (HASH_CURSOR *)dbc->internal;
1619 DIRTY_META(dbp, hcp, ret);
1630 new_addr = hcp->hdr->last_freed;
1638 splitnum = hcp->hdr->ovfl_point;
1639 hcp->hdr->spares[splitnum]++;
1640 offset = hcp->hdr->spares[splitnum] -
1641 (splitnum ? hcp->hdr->spares[splitnum - 1] : 0);
1642 new_addr = PGNO_OF(hcp, hcp->hdr->ovfl_point, offset);
1643 if (new_addr > MAX_PAGES(hcp)) {
1645 hcp->hdr->spares[splitnum]--;
1658 0, newalloc_flag, type, lsnp, &hcp->hdr->lsn)) != 0)
1661 hcp->hdr->lsn = new_lsn;
1668 hcp->hdr->last_freed = next_free;
1669 P_INIT(p, hcp->hdr->pagesize, PGNO(p), PGNO_INVALID,
1690 __bucket_to_page(hcp, n)
1691 HASH_CURSOR *hcp;
1698 ret_val += hcp->hdr->spares[__db_log2(n + 1) - 1];
1712 HASH_CURSOR *hcp;
1719 hcp = (HASH_CURSOR *)dbc->internal;
1721 curpages = hcp->hdr->spares[hcp->hdr->ovfl_point] -
1722 hcp->hdr->spares[hcp->hdr->ovfl_point - 1];
1723 numpages = hcp->hdr->ovfl_point + 1 - curpages;
1725 last_pgno = hcp->hdr->last_freed;
1726 new_pgno = PGNO_OF(hcp, hcp->hdr->ovfl_point, curpages + 1);
1730 numpages, last_pgno, hcp->hdr->ovfl_point, &hcp->hdr->lsn);
1731 hcp->hdr->lsn = new_lsn;
1735 hcp->hdr->spares[hcp->hdr->ovfl_point] += numpages;
1738 PGNO_OF(hcp, hcp->hdr->ovfl_point, curpages + i),
1746 hcp->hdr->last_freed = last_pgno;
1758 HASH_CURSOR *hcp;
1762 hcp = (HASH_CURSOR *)dbc->internal;
1772 if (hcp->lock != 0 && hcp->lbucket != hcp->bucket) {
1778 !F_ISSET(hcp, H_ORIGINAL) && (ret =
1779 lock_put(dbp->dbenv->lk_info, hcp->lock)) != 0)
1781 F_CLR(hcp, H_ORIGINAL);
1782 hcp->lock = 0;
1784 if (hcp->lock == 0 && (ret = __ham_lock_bucket(dbc, mode)) != 0)
1786 hcp->lbucket = hcp->bucket;
1789 if (hcp->pagep == NULL) {
1790 if (hcp->pgno == PGNO_INVALID) {
1791 hcp->pgno = BUCKET_TO_PAGE(hcp, hcp->bucket);
1792 hcp->bndx = 0;
1796 __ham_get_page(dbp, hcp->pgno, &hcp->pagep)) != 0)
1800 if (hcp->dpgno != PGNO_INVALID && hcp->dpagep == NULL)
1802 __ham_get_page(dbp, hcp->dpgno, &hcp->dpagep)) != 0)
1822 HASH_CURSOR *hcp;
1827 hcp = (HASH_CURSOR *)dbc->internal;
1828 if (LF_ISSET(H_ISDUP) && hcp->dpagep != NULL &&
1829 (ret = __ham_put_page(dbp, hcp->dpagep, dirty)) != 0)
1831 else if (!LF_ISSET(H_ISDUP) && hcp->pagep != NULL &&
1832 (ret = __ham_put_page(dbp, hcp->pagep, dirty)) != 0)
1839 hcp->dpagep = p;
1840 hcp->dpgno = pgno;
1841 hcp->dndx = 0;
1843 hcp->pagep = p;
1844 hcp->pgno = pgno;
1845 hcp->bndx = 0;
1860 HASH_CURSOR *hcp;
1863 hcp = (HASH_CURSOR *)dbc->internal;
1864 dbc->lock.pgno = (db_pgno_t)(hcp->bucket);
1867 &dbc->lock_dbt, mode, &hcp->lock);
1870 &dbc->lock_dbt, mode, &hcp->lock);