|
|
1.1 ! root 1: # include <ingres.h> ! 2: # include <symbol.h> ! 3: # include "globs.h" ! 4: # include <sccs.h> ! 5: ! 6: SCCSID(@(#)rangetable.c 7.1 2/5/81) ! 7: ! 8: /* ! 9: ** Allocation of range table. ! 10: ** The size of the range table for decomp is ! 11: ** MAXRANGE plus 2; 1 for a free aggregate slot and 1 for ! 12: ** a free secondary index slot. ! 13: ** ! 14: ** Trace Flags: ! 15: ** 63 ! 16: */ ! 17: ! 18: ! 19: ! 20: initrange() ! 21: { ! 22: register struct rang_tab *rt; ! 23: ! 24: for (rt = De.de_rangev; rt <= &De.de_rangev[MAXRANGE+1]; rt++) ! 25: rt->relnum = -1; ! 26: } ! 27: /* ! 28: ** Save the entry for var in the range table. ! 29: */ ! 30: ! 31: savrang(locrang, var) ! 32: int locrang[]; ! 33: int var; ! 34: { ! 35: register int i; ! 36: ! 37: i = var; ! 38: locrang[i] = De.de_rangev[i].relnum; ! 39: } ! 40: /* ! 41: ** Restore the entry for var from the local range ! 42: ** table locrang. ! 43: */ ! 44: ! 45: rstrang(locrang, var) ! 46: int locrang[]; ! 47: int var; ! 48: { ! 49: register int i; ! 50: ! 51: i = var; ! 52: De.de_rangev[i].relnum = locrang[i]; ! 53: } ! 54: /* ! 55: ** Update the range name. It is up to ! 56: ** the calling routine to openr the new rel. ! 57: */ ! 58: ! 59: new_range(var, relnum) ! 60: int var; ! 61: int relnum; ! 62: { ! 63: register int i, old; ! 64: ! 65: i = var; ! 66: ! 67: old = De.de_rangev[i].relnum; ! 68: De.de_rangev[i].relnum = relnum; ! 69: ! 70: return (old); ! 71: } ! 72: /* ! 73: ** Make a copy of the current range table. ! 74: */ ! 75: ! 76: newquery(locrang) ! 77: int locrang[]; ! 78: { ! 79: register struct rang_tab *rp; ! 80: register int *ip, i; ! 81: ! 82: ip = locrang; ! 83: rp = De.de_rangev; ! 84: ! 85: for (i = 0; i < MAXRANGE; i++) ! 86: *ip++ = (rp++)->relnum; ! 87: } ! 88: /* ! 89: ** Check the range table to see if any ! 90: ** relations changed since the last call ! 91: ** to newquery. If so, they were caused ! 92: ** by reformat. Restore back the orig relation ! 93: ** Reopen it if reopen == TRUE. ! 94: */ ! 95: ! 96: endquery(locrang, reopen) ! 97: int locrang[]; ! 98: int reopen; ! 99: { ! 100: register struct rang_tab *rp; ! 101: register int *ip, i; ! 102: int old; ! 103: bool dstr_flag; ! 104: extern DESC *openr1(); ! 105: ! 106: rp = De.de_rangev; ! 107: ip = locrang; ! 108: ! 109: dstr_flag = FALSE; ! 110: initp(); ! 111: for (i = 0; i < MAXRANGE; i++) ! 112: { ! 113: if (rp->relnum != *ip) ! 114: { ! 115: # ifdef xDTR1 ! 116: if (tTf(63, -1)) ! 117: printf("reformat or reduct changed var %d (%d,%d)\n", i, *ip, rp->relnum); ! 118: # endif ! 119: ! 120: old = new_range(i, *ip); ! 121: dstr_flag |= dstr_mark(old); ! 122: if (reopen) ! 123: openr1(i); ! 124: } ! 125: ! 126: ip++; ! 127: rp++; ! 128: } ! 129: ! 130: if (dstr_flag) ! 131: call_dbu(mdDESTROY, FALSE); ! 132: else ! 133: resetp(); ! 134: } ! 135: /* ! 136: ** Return the name of the variable "var" ! 137: ** in the range table ! 138: */ ! 139: ! 140: char * ! 141: rangename(var) ! 142: int var; ! 143: { ! 144: extern char *rnum_convert(); ! 145: ! 146: return (rnum_convert(De.de_rangev[var].relnum)); ! 147: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.