|
|
1.1 root 1: # include <ingres.h>
2: # include <access.h>
3: # include <catalog.h>
4: # include <btree.h>
5: # include <sccs.h>
6:
7: SCCSID(@(#)insert_mbtree.c 8.1 12/31/84)
8:
9: insert_mbtree(d, btree, lid, tid, tidpos)
10:
11: register DESC *d;
12: char *btree;
13: long lid[];
14: long *tid;
15: TID *tidpos;
16: {
17: register int i, j;
18: long page;
19: long l;
20: long last_lid();
21: struct locator tidloc;
22: long ntid;
23: long t;
24: struct BTreeNode junk;
25:
26: page = RT;
27: for (i = 0; i < d->reldum.reldim - 1; ++i)
28: {
29: if (lid[i] && lid[i+1])
30: {
31: if ((t = get_tid(page, lid[i], &tidloc)) < -1)
32: return(-1);
33: if (t != -1)
34: page = t;
35: }
36: if (!lid[i] || t == -1 || !lid[i+1])
37: {
38: for (j = i; j < d->reldum.reldim - 1; ++j)
39: {
40: if (j != i)
41: lid[j] = 1;
42: else if (t == -1 || !lid[i])
43: lid[j] = last_lid(page);
44: insert_btree(btree, page, lid[j], &ntid, tidpos, j + 2);
45: page = ntid;
46: }
47: lid[d->reldum.reldim - 1] = 1;
48: break;
49: }
50: }
51: l = last_lid(page);
52: if (lid[d->reldum.reldim - 1] < 0 || lid[d->reldum.reldim - 1] > l)
53: return(-1);
54: if (!lid[d->reldum.reldim - 1])
55: lid[d->reldum.reldim - 1] = l;
56: insert_btree(btree, page, lid[d->reldum.reldim - 1], tid, tidpos, 0);
57:
58: return (0);
59: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.