|
|
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.