1: # include <ingres.h>
2: # include <aux.h>
3: # include <access.h>
4: # include <sccs.h>
5:
6: SCCSID(@(#)get.c 8.1 12/31/84)
7:
8: /*
9: ** GET - get a single tuple
10: **
11: ** Get either gets the next sequencial tuple after
12: ** "tid" or else gets the tuple specified by tid.
13: **
14: ** If getnxt == TRUE, then tid is incremented to the next
15: ** tuple after tid. If there are no more, then get returns
16: ** 1. Otherwise get returns 0 and "tid" is set to the tid of
17: ** the returned tuple.
18: **
19: ** Under getnxt mode, the previous page is reset before
20: ** the next page is read. This is done to prevent the previous
21: ** page from hanging around in the am's buffers when we "know"
22: ** that it will not be referenced again.
23: **
24: ** If getnxt == FALSE then the tuple specified by tid is
25: ** returned. If the tuple was deleted previously,
26: ** get retuns 2 else get returns 0.
27: **
28: ** If getnxt is true, limtid holds the the page number
29: ** of the first page past the end point. Limtid and the
30: ** initial value of tid are set by calls to FIND.
31: **
32: ** returns:
33: ** <0 fatal error
34: ** 0 success
35: ** 1 end of scan (getnxt=TRUE only)
36: ** 2 tuple deleted (getnxt=FALSE only)
37: */
38:
39:
40: get(d, tid, limtid, tuple, getnxt)
41: register DESC *d;
42: register TID *tid;
43: TID *limtid;
44: int getnxt;
45: char *tuple;
46: {
47: register int i;
48: long pageid, lpageid;
49:
50: # ifdef xATR1
51: if (tTf(23, 0))
52: {
53: printf("get: %.14s,", d->reldum.relid);
54: dumptid(tid);
55: printf("get: lim");
56: dumptid(limtid);
57: }
58: # endif
59: if (get_page(d, tid))
60: {
61: return (-1);
62: }
63: if (getnxt)
64: {
65: pluck_page(limtid, &lpageid);
66: do
67: {
68: while (((++(tid->line_id)) & I1MASK) >= Acc_head->nxtlino)
69: {
70: tid->line_id = -1;
71: pageid = Acc_head->ovflopg;
72: stuff_page(tid, &pageid);
73: if (pageid == 0)
74: {
75: pageid = Acc_head->mainpg;
76: stuff_page(tid, &pageid);
77: if (pageid == 0 || pageid == lpageid + 1)
78: return (1);
79: }
80: if (i = resetacc(Acc_head))
81: return (i);
82: if (i = get_page(d, tid))
83: return (i);
84: }
85: } while (!Acc_head->linetab[-(tid->line_id & I1MASK)]);
86: }
87: else
88: {
89: if (i = invalid(tid))
90: return (i);
91: }
92: get_tuple(d, tid, tuple);
93: # ifdef xATR2
94: if (tTf(23, 1))
95: {
96: printf("get: ");
97: printup(d, tuple);
98: }
99: # endif
100: return (0);
101: }
Defined functions
get
defined in line
6; used 2 times