1: # include "../ingres.h"
2: # include "decomp.h"
3:
4: /*
5: ** Allocation of range table.
6: ** The size of the range table for decomp is
7: ** MAXRANGE plus 2; 1 for a free aggregate slot and 1 for
8: ** a free secondary index slot.
9: */
10: struct rang_tab Rangev[MAXRANGE+2]; /* global range table with extra slot for FREEVAR and SECINDXVAR */
11:
12:
13:
14: initrange()
15: {
16: register struct rang_tab *rt;
17:
18: for (rt = Rangev; rt <= &Rangev[MAXRANGE+1]; rt++)
19: rt->relnum = -1;
20: }
21:
22:
23: savrang(locrang, var)
24: int locrang[];
25: int var;
26:
27: /*
28: ** Save the entry for var in the range table.
29: */
30:
31: {
32: register int i;
33:
34: i = var;
35: locrang[i] = Rangev[i].relnum;
36: }
37:
38: rstrang(locrang, var)
39: int locrang[];
40: int var;
41:
42: /*
43: ** Restore the entry for var from the local range
44: ** table locrang.
45: */
46:
47: {
48: register int i;
49:
50: i = var;
51: Rangev[i].relnum = locrang[i];
52: }
53:
54:
55:
56: new_range(var, relnum)
57: int var;
58: int relnum;
59:
60: /*
61: ** Update the range name. It is up to
62: ** the calling routine to openr the new rel.
63: */
64:
65: {
66: register int i, old;
67:
68: i = var;
69:
70: old = Rangev[i].relnum;
71: Rangev[i].relnum = relnum;
72:
73: return (old);
74: }
75:
76:
77: newquery(locrang)
78: int locrang[];
79:
80: /*
81: ** Make a copy of the current range table.
82: */
83:
84: {
85: register struct rang_tab *rp;
86: register int *ip, i;
87:
88: ip = locrang;
89: rp = Rangev;
90:
91: for (i = 0; i < MAXRANGE; i++)
92: *ip++ = (rp++)->relnum;
93: }
94:
95:
96: endquery(locrang, reopen)
97: int locrang[];
98: int reopen;
99:
100: /*
101: ** Check the range table to see if any
102: ** relations changed since the last call
103: ** to newquery. If so, they were caused
104: ** by reformat. Restore back the orig relation
105: ** Reopen it if reopen == TRUE.
106: */
107:
108: {
109: register struct rang_tab *rp;
110: register int *ip, i;
111: int old;
112:
113: rp = Rangev;
114: ip = locrang;
115:
116: initp();
117: for (i = 0; i < MAXRANGE; i++)
118: {
119: if (rp->relnum != *ip)
120: {
121: # ifdef xDTR1
122: if (tTf(15, -1))
123: printf("reformat or reduct changed var %d (%d,%d)\n", i, *ip, rp->relnum);
124: # endif
125:
126: old = new_range(i, *ip);
127: dstr_mark(old);
128: if (reopen)
129: openr1(i);
130: }
131:
132: ip++;
133: rp++;
134: }
135:
136: dstr_flush(0);
137: }
138:
139:
140: char *rangename(var)
141: int var;
142:
143: /*
144: ** Return the name of the variable "var"
145: ** in the range table
146: */
147:
148: {
149: char *rnum_convert();
150:
151: return (rnum_convert(Rangev[var].relnum));
152: }
Defined functions
Defined variables
Rangev
defined in line
10; used 28 times
- in line 18(2),
35,
51,
70-71(2),
89,
113,
151
- in /usr/ingres/source/decomp/openrs.c line
169,
214,
244,
266
- in /usr/ingres/source/decomp/qryproc.c line
82
- in /usr/ingres/source/decomp/rangetable.c line
18(2),
35,
51,
70-71(2),
89,
113,
151
- in /usr/ingres/source/decomp/readq.c line
69
- in /usr/ingres/source/decomp/reformat.c line
211-212(2)
- in /usr/ingres/source/decomp/ret_unique.c line
25
- in /usr/ingres/source/decomp/selectv.c line
106