Lines Matching refs:cp

48 #define	DISCARD(dbc, cp) {						\  argument
49 if ((cp)->page != NULL) { \
50 (void)memp_fput((dbc)->dbp->mpf, (cp)->page, 0); \
51 (cp)->page = NULL; \
53 if ((cp)->lock != LOCK_INVALID) { \
54 (void)__BT_TLPUT((dbc), (cp)->lock); \
55 (cp)->lock = LOCK_INVALID; \
61 #define IS_CUR_DELETED(cp) \ argument
62 (((cp)->dpgno == PGNO_INVALID && \
63 B_DISSET(GET_BKEYDATA((cp)->page, \
64 (cp)->indx + O_INDX)->type)) || \
65 ((cp)->dpgno != PGNO_INVALID && \
66 B_DISSET(GET_BKEYDATA((cp)->page, (cp)->dindx)->type)))
70 #define IS_DELETED(cp, indx) \ argument
71 (((cp)->dpgno == PGNO_INVALID && \
72 B_DISSET(GET_BKEYDATA((cp)->page, (indx) + O_INDX)->type)) || \
73 ((cp)->dpgno != PGNO_INVALID && \
74 B_DISSET(GET_BKEYDATA((cp)->page, (indx))->type)))
99 __bam_c_reset(cp) in __bam_c_reset() argument
100 CURSOR *cp; in __bam_c_reset()
102 cp->sp = cp->csp = cp->stack;
103 cp->esp = cp->stack + sizeof(cp->stack) / sizeof(cp->stack[0]);
104 cp->page = NULL;
105 cp->pgno = PGNO_INVALID;
106 cp->indx = 0;
107 cp->dpgno = PGNO_INVALID;
108 cp->dindx = 0;
109 cp->lock = LOCK_INVALID;
110 cp->mode = DB_LOCK_NG;
111 cp->recno = RECNO_OOB;
112 cp->flags = 0;
126 CURSOR *cp; local
129 if ((ret = __os_calloc(1, sizeof(CURSOR), &cp)) != 0)
133 cp->dbc = dbc;
143 __os_free(cp, sizeof(CURSOR));
150 dbc->internal = cp;
166 __bam_c_reset(cp);
179 CURSOR *cp; local
184 cp = dbc->internal;
191 if (dbp->type == DB_BTREE && F_ISSET(cp, C_DELETED))
192 ret = __bam_c_physdel(dbc, cp, NULL);
195 if (cp->lock != LOCK_INVALID) {
196 (void)__BT_TLPUT(dbc, cp->lock);
197 cp->lock = LOCK_INVALID;
202 if (cp->csp != cp->stack)
207 __bam_c_reset(cp);
235 CURSOR *cp; local
244 cp = dbc->internal;
251 F_ISSET(dbp, DB_AM_RDONLY), cp->pgno != PGNO_INVALID)) != 0)
265 if (F_ISSET(cp, C_DELETED))
274 if (F_ISSET(dbp, DB_AM_LOCKING) && cp->mode != DB_LOCK_WRITE) {
276 0, cp->pgno, DB_LOCK_WRITE, &lock)) != 0)
278 (void)__BT_TLPUT(dbc, cp->lock);
279 cp->lock = lock;
280 cp->mode = DB_LOCK_WRITE;
289 if (cp->dpgno == PGNO_INVALID) {
290 pgno = cp->pgno;
291 indx = cp->indx;
293 pgno = cp->dpgno;
294 indx = cp->dindx;
310 if (cp->dpgno == PGNO_INVALID)
328 if ((ret = __bam_c_getstack(dbc, cp)) != 0)
350 CURSOR *cp, copy, start; local
356 cp = dbc->internal;
362 key, data, flags, cp->pgno != PGNO_INVALID)) != 0)
394 cp->page = NULL;
395 copy = *cp;
396 cp->lock = LOCK_INVALID;
401 if (F_ISSET(cp, C_DELETED)) {
408 0, cp->pgno, DB_LOCK_READ, &cp->lock)) == 0)
410 cp->dpgno == PGNO_INVALID ? &cp->pgno : &cp->dpgno,
411 0, &cp->page);
416 if (cp->pgno == PGNO_INVALID) {
420 if ((ret = __bam_c_next(dbc, cp, 1)) != 0)
424 if (!POSSIBLE_DUPLICATE(cp, copy)) {
430 if (cp->pgno != PGNO_INVALID) {
431 if ((ret = __bam_c_next(dbc, cp, 1)) != 0)
437 if ((ret = __bam_c_first(dbc, cp)) != 0)
441 if (cp->pgno != PGNO_INVALID) {
442 if ((ret = __bam_c_prev(dbc, cp)) != 0)
448 if ((ret = __bam_c_last(dbc, cp)) != 0)
452 if ((ret = __bam_c_search(dbc, cp, key, flags, &exact)) != 0)
465 start = *cp;
466 if ((ret = __bam_dup(dbc, cp, cp->indx, 0)) != 0)
468 if (cp->dpgno != PGNO_INVALID && IS_CUR_DELETED(cp)) {
469 if ((ret = __bam_c_next(dbc, cp, 0)) != 0)
471 if (!POSSIBLE_DUPLICATE(cp, start)) {
478 if ((ret = __bam_c_search(dbc, cp, key, flags, &exact)) != 0)
485 cp->dpgno == PGNO_INVALID ? &cp->pgno : &cp->dpgno,
486 0, &cp->page)) != 0)
491 (ret = __bam_c_next(dbc, cp, 1)) != 0)
495 __bam_c_search(dbc, cp, key, flags, &exact)) != 0)
502 if ((ret = __bam_dup(dbc, cp, cp->indx, 0)) != 0)
507 if ((ret = __bam_dsearch(dbc, cp, data, NULL)) != 0)
511 if (IS_CUR_DELETED(cp)) {
517 if ((ret = __bam_c_search(dbc, cp, key, flags, &exact)) != 0)
525 if (cp->indx == NUM_ENT(cp->page) &&
526 (ret = __bam_c_next(dbc, cp, 0)) != 0)
533 if ((ret = __bam_dup(dbc, cp, cp->indx, 0)) != 0)
540 if (IS_CUR_DELETED(cp) && (ret = __bam_c_next(dbc, cp, 0)) != 0)
552 if (cp->dpgno != PGNO_INVALID) {
553 if ((ret = memp_fget(dbp->mpf, &cp->pgno, 0, &h)) != 0)
556 h = cp->page;
558 h, cp->indx, key, &dbc->rkey.data, &dbc->rkey.ulen);
559 if (cp->dpgno != PGNO_INVALID)
566 if ((ret = __db_ret(dbp, cp->page,
567 cp->dpgno == PGNO_INVALID ? cp->indx + O_INDX : cp->dindx,
582 if ((ret = __bam_c_physdel(dbc, &copy, cp->page)) != 0)
585 F_CLR(cp, C_DELETED);
592 if ((ret = memp_fput(dbp->mpf, cp->page, 0)) != 0)
596 err: if (cp->page != NULL)
597 (void)memp_fput(dbp->mpf, cp->page, 0);
598 if (cp->lock != LOCK_INVALID)
599 (void)__BT_TLPUT(dbc, cp->lock);
600 *cp = copy;
616 __bam_dsearch(dbc, cp, data, iflagp) in __bam_dsearch() argument
618 CURSOR *cp;
633 if (cp->dpgno != PGNO_INVALID) {
635 data, cp->dpgno, &cp->dindx, &cp->page, &cmp)) != 0)
637 cp->dpgno = cp->page->pgno;
649 copy = *cp;
652 last = *cp;
655 if ((cmp = __bam_cmp(dbp, data, cp->page, cp->indx + O_INDX,
682 if ((cp->indx += P_INDX) >= NUM_ENT(cp->page)) {
692 if (!POSSIBLE_DUPLICATE(cp, copy)) {
695 use_last: *cp = last;
713 CURSOR *cp; local
721 cp = dbc->internal;
724 if ((ret = memp_fget(dbp->mpf, &cp->pgno, 0, &cp->page)) != 0)
730 if ((ret = __db_ret(dbp, cp->page, cp->indx, &dbt, NULL, NULL)) != 0)
745 err: (void)memp_fput(dbp->mpf, cp->page, 0);
760 CURSOR *cp, copy; local
770 cp = dbc->internal;
779 F_ISSET(dbp, DB_AM_RDONLY), cp->pgno != PGNO_INVALID)) != 0)
808 if ((ret = __db_ret(dbp, cp->page, indx,
826 DISCARD(dbc, cp);
835 *cp = copy;
846 cp->page = NULL;
847 copy = *cp;
848 cp->lock = LOCK_INVALID;
856 if (cp->dpgno == PGNO_INVALID) {
857 pgno = cp->pgno;
858 indx = cp->indx;
860 pgno = cp->dpgno;
861 indx = cp->dindx;
871 (flags != DB_CURRENT || F_ISSET(cp, C_DELETED))) {
873 if ((ret = __bam_c_getstack(dbc, cp)) != 0)
875 cp->page = cp->csp->page;
882 0, cp->pgno, DB_LOCK_WRITE, &cp->lock)) == 0)
883 ret = memp_fget(dbp->mpf, &pgno, 0, &cp->page);
898 cp->page, indx, dbp->dup_compare) != 0) {
914 if ((ret = __bam_c_search(dbc, cp, key,
944 if ((ret = __bam_dup(dbc, cp, cp->indx,
959 cp, data, &iiop)) != 0)
969 if (cp->dpgno == PGNO_INVALID) {
970 pgno = cp->pgno;
971 indx = cp->indx;
973 pgno = cp->dpgno;
974 indx = cp->dindx;
979 ret = __bam_iitem(dbc, &cp->page, &indx, key, data, iiop, iiflags);
999 if (cp->pgno == copy.pgno && cp->indx == copy.indx &&
1000 cp->dpgno == copy.dpgno && cp->dindx == copy.dindx)
1009 if (cp->dpgno == PGNO_INVALID)
1010 cp->indx = indx;
1012 cp->dindx = indx;
1025 if ((ret = __bam_c_physdel(dbc, &copy, cp->page)) != 0)
1028 F_CLR(cp, C_DELETED);
1042 if (stack && BT_STK_POP(cp) != NULL)
1046 if ((ret = memp_fput(dbp->mpf, cp->page, 0)) != 0)
1054 DISCARD(dbc, cp);
1055 *cp = copy;
1070 __bam_c_first(dbc, cp) in __bam_c_first() argument
1072 CURSOR *cp;
1083 __bam_lget(dbc, 0, pgno, DB_LOCK_READ, &cp->lock)) != 0)
1085 if ((ret = memp_fget(dbp->mpf, &pgno, 0, &cp->page)) != 0)
1089 if (ISLEAF(cp->page))
1092 pgno = GET_BINTERNAL(cp->page, 0)->pgno;
1093 DISCARD(dbc, cp);
1096 cp->pgno = cp->page->pgno;
1097 cp->indx = 0;
1098 cp->dpgno = PGNO_INVALID;
1101 if ((ret = __bam_dup(dbc, cp, cp->indx, 0)) != 0)
1105 if (NUM_ENT(cp->page) == 0 || IS_CUR_DELETED(cp))
1106 if ((ret = __bam_c_next(dbc, cp, 0)) != 0)
1117 __bam_c_last(dbc, cp) in __bam_c_last() argument
1119 CURSOR *cp;
1130 __bam_lget(dbc, 0, pgno, DB_LOCK_READ, &cp->lock)) != 0)
1132 if ((ret = memp_fget(dbp->mpf, &pgno, 0, &cp->page)) != 0)
1136 if (ISLEAF(cp->page))
1140 GET_BINTERNAL(cp->page, NUM_ENT(cp->page) - O_INDX)->pgno;
1141 DISCARD(dbc, cp);
1144 cp->pgno = cp->page->pgno;
1145 cp->indx = NUM_ENT(cp->page) == 0 ? 0 : NUM_ENT(cp->page) - P_INDX;
1146 cp->dpgno = PGNO_INVALID;
1149 if ((ret = __bam_dup(dbc, cp, cp->indx, 1)) != 0)
1153 if (NUM_ENT(cp->page) == 0 || IS_CUR_DELETED(cp))
1154 if ((ret = __bam_c_prev(dbc, cp)) != 0)
1165 __bam_c_next(dbc, cp, initial_move) in __bam_c_next() argument
1167 CURSOR *cp;
1181 if (cp->dpgno == PGNO_INVALID) {
1183 pgno = cp->pgno;
1184 indx = cp->indx;
1187 pgno = cp->dpgno;
1188 indx = cp->dindx;
1190 if (cp->page == NULL) {
1192 __bam_lget(dbc, 0, pgno, DB_LOCK_READ, &cp->lock)) != 0)
1194 if ((ret = memp_fget(dbp->mpf, &pgno, 0, &cp->page)) != 0)
1211 if (indx >= NUM_ENT(cp->page)) {
1218 pgno = cp->page->next_pgno;
1221 if (cp->dpgno == PGNO_INVALID)
1225 cp->dpgno = PGNO_INVALID;
1228 pgno = cp->pgno;
1229 indx = cp->indx + P_INDX;
1233 DISCARD(dbc, cp);
1235 0, pgno, DB_LOCK_READ, &cp->lock)) != 0)
1238 memp_fget(dbp->mpf, &pgno, 0, &cp->page)) != 0)
1244 if (IS_DELETED(cp, indx)) {
1254 if (cp->dpgno == PGNO_INVALID) {
1255 cp->pgno = cp->page->pgno;
1256 cp->indx = indx;
1258 if ((ret = __bam_dup(dbc, cp, indx, 0)) != 0)
1260 if (cp->dpgno != PGNO_INVALID) {
1261 indx = cp->dindx;
1266 cp->dpgno = cp->page->pgno;
1267 cp->dindx = indx;
1279 __bam_c_prev(dbc, cp) in __bam_c_prev() argument
1281 CURSOR *cp;
1294 if (cp->dpgno == PGNO_INVALID) {
1296 pgno = cp->pgno;
1297 indx = cp->indx;
1300 pgno = cp->dpgno;
1301 indx = cp->dindx;
1303 if (cp->page == NULL) {
1305 __bam_lget(dbc, 0, pgno, DB_LOCK_READ, &cp->lock)) != 0)
1307 if ((ret = memp_fget(dbp->mpf, &pgno, 0, &cp->page)) != 0)
1325 pgno = cp->page->prev_pgno;
1328 if (cp->dpgno == PGNO_INVALID)
1332 cp->dpgno = PGNO_INVALID;
1335 pgno = cp->pgno;
1336 indx = cp->indx;
1341 DISCARD(dbc, cp);
1343 0, pgno, DB_LOCK_READ, &cp->lock)) != 0)
1346 memp_fget(dbp->mpf, &pgno, 0, &cp->page)) != 0)
1350 indx = NUM_ENT(cp->page);
1357 if (IS_DELETED(cp, indx))
1365 if (cp->dpgno == PGNO_INVALID) {
1366 cp->pgno = cp->page->pgno;
1367 cp->indx = indx;
1369 if ((ret = __bam_dup(dbc, cp, indx, 1)) != 0)
1371 if (cp->dpgno != PGNO_INVALID) {
1372 indx = cp->dindx + O_INDX;
1377 cp->dpgno = cp->page->pgno;
1378 cp->dindx = indx;
1390 __bam_c_search(dbc, cp, key, flags, exactp) in __bam_c_search() argument
1392 CURSOR *cp;
1522 BT_STK_CLR(cp);
1523 BT_STK_ENTER(cp, h, indx, lock, ret);
1545 cp->page = cp->csp->page;
1546 cp->pgno = cp->csp->page->pgno;
1547 cp->indx = cp->csp->indx;
1548 cp->lock = cp->csp->lock;
1549 cp->dpgno = PGNO_INVALID;
1557 ((cp->page->next_pgno == PGNO_INVALID &&
1558 cp->indx >= NUM_ENT(cp->page)) ||
1559 (cp->page->prev_pgno == PGNO_INVALID && cp->indx == 0)) ?
1560 cp->pgno : PGNO_INVALID;
1577 __bam_dup(dbc, cp, indx, last_dup) in __bam_dup() argument
1579 CURSOR *cp;
1599 bo = GET_BOVERFLOW(cp->page, indx + O_INDX);
1604 if ((ret = memp_fput(dbp->mpf, cp->page, 0)) != 0)
1606 cp->page = NULL;
1608 if ((ret = __db_dend(dbc, pgno, &cp->page)) != 0)
1610 indx = NUM_ENT(cp->page) - O_INDX;
1612 if ((ret = memp_fget(dbp->mpf, &pgno, 0, &cp->page)) != 0)
1618 cp->dpgno = cp->page->pgno;
1619 cp->dindx = indx;
1629 __bam_c_physdel(dbc, cp, h) in __bam_c_physdel() argument
1631 CURSOR *cp;
1648 if (cp->dpgno == PGNO_INVALID) {
1649 pgno = cp->pgno;
1650 indx = cp->indx;
1652 pgno = cp->dpgno;
1653 indx = cp->dindx;
1771 __bam_lget(dbc, 0, cp->pgno, DB_LOCK_WRITE, &lock)) != 0)
1773 if ((ret = memp_fget(dbp->mpf, &cp->pgno, 0, &h)) != 0) {
1778 indx = cp->indx;
1878 __bam_c_getstack(dbc, cp) in __bam_c_getstack() argument
1880 CURSOR *cp;
1894 pgno = cp->pgno;