|
|
1.1 root 1: # include <ingres.h>
2: # include <symbol.h>
3: # include <range.h>
4: # include <tree.h>
5: # include <sccs.h>
6:
7: SCCSID(@(#)range.c 7.1 2/5/81)
8:
9:
10:
11: /*
12: ** CLRRANGE -- clear range table(s)
13: **
14: ** Parameters:
15: ** none.
16: **
17: ** Returns:
18: ** none.
19: **
20: ** Side Effects:
21: ** The range table (Qt.qt_rangev) is cleared.
22: */
23:
24: clrrange()
25: {
26: register int i;
27: register DESC *d;
28:
29: for (i = 0; i < MAXRANGE; i++)
30: {
31: Qt.qt_rangev[i].rngvmark = FALSE;
32: Qt.qt_remap[i] = i;
33: d = Qt.qt_rangev[i].rngvdesc;
34: if (d != NULL)
35: {
36: xfree(d);
37: Qt.qt_rangev[i].rngvdesc = NULL;
38: }
39: }
40: }
41: /*
42: ** DECLARE -- declare a range variable
43: **
44: ** A range variable is declared. If possible, the preferred varno
45: ** stated is used (this is the one already in the tree). This
46: ** should always be possible when reading the original tree (and
47: ** should probably stay this way to make debugging easier). When
48: ** not possible, a new varno is chosen and the tree can later
49: ** be patched up by 'mapvars'.
50: **
51: ** Parameters:
52: ** varno -- the preferred varno.
53: ** desc -- the descriptor for this range variable.
54: **
55: ** Returns:
56: ** The actual varno assigned.
57: **
58: ** Side Effects:
59: ** Qt.qt_rangev is updated.
60: **
61: ** Trace Flags:
62: ** 7.0-3
63: */
64:
65: declare(varno, desc)
66: int varno;
67: DESC *desc;
68: {
69: register int i;
70: register int vn;
71: extern char *trim_relname();
72:
73: vn = varno;
74:
75: /* check for preferred slot in range table available */
76: if (desc != NULL && Qt.qt_rangev[vn].rngvdesc != NULL)
77: {
78: /* try to find another slot */
79: for (i = 0; i < MAXRANGE; i++)
80: if (Qt.qt_rangev[i].rngvdesc == NULL)
81: break;
82:
83: if (i >= MAXRANGE)
84: {
85: /* too many variables */
86: error(3100, trim_relname(desc->reldum.relid), 0);
87: }
88:
89: vn = i;
90: }
91:
92: /* if clearing, make sure something to clear */
93: if (desc == NULL && Qt.qt_rangev[vn].rngvdesc == NULL)
94: syserr("declare: null clr %d", vn);
95:
96: /* declare variable in the slot */
97: Qt.qt_rangev[vn].rngvdesc = desc;
98: Qt.qt_rangev[vn].rngvmark = (desc != NULL);
99:
100: # ifdef xQTR2
101: if (tTf(7, 0))
102: lprintf("declare(%d, %.14s) into slot %d\n", varno,
103: desc != NULL ? desc->reldum.relid : "(NULL)", vn);
104: # endif
105:
106: return (vn);
107: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.