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