|
|
1.1 root 1: # include <ingres.h>
2: # include <aux.h>
3: # include <pv.h>
4: # include <sccs.h>
5: # include <symbol.h>
6: # include <func.h>
7:
8:
9: SCCSID (@(#)sysfunc.c 8.2 1/15/85)
10:
11: short tTdbu[100];
12: extern int sysfunc();
13: extern int null_fn();
14:
15: int Noupdt = FALSE;
16:
17: struct fn_def SysFuncFn =
18: {
19: "SYSMOD",
20: sysfunc,
21: null_fn,
22: null_fn,
23: NULL,
24: 0,
25: tTdbu,
26: 100,
27: 'S',
28: 0
29: };
30:
31:
32: extern int Status;
33:
34: struct modtabl
35: {
36: char *rname;
37: char **parvec;
38: int goahead;
39: int normgo;
40: int optn;
41: };
42:
43: char *Relpar[] =
44: {
45: "relation", "hash", "name",
46: "relid", NULL
47: };
48:
49: char *Attpar[] =
50: {
51: "attribute", "hash", "name",
52: "attrelid", "attowner", "#attid",
53: NULL
54: };
55:
56: char *Indpar[] =
57: {
58: "indexes", "hash", "name",
59: "irelidp", "iownerp", "",
60: "minpages", "5", NULL
61: };
62:
63: char *Trepar[] =
64: {
65: "tree", "hash", "name",
66: "treerelid", "treeowner", "treetype",
67: NULL
68: };
69:
70: char *Propar[] =
71: {
72: "protect", "hash", "name",
73: "prorelid", "prorelown", NULL
74: };
75:
76: char *Intpar[] =
77: {
78: "integrities", "hash", "name",
79: "intrelid", "intrelowner", NULL
80: };
81:
82: char *Rdelpar[] =
83: {
84: "rdelim", "isam", "name",
85: "order", "group", "delim",
86: NULL
87: };
88:
89: struct modtabl Modtabl[] =
90: {
91: "relation", &Relpar[0], FALSE, TRUE, FALSE,
92: "attribute", &Attpar[0], FALSE, TRUE, FALSE,
93: "indexes", &Indpar[0], FALSE, TRUE, FALSE,
94: "tree", &Trepar[0], FALSE, TRUE, TRUE,
95: "protect", &Propar[0], FALSE, TRUE, TRUE,
96: "integrities", &Intpar[0], FALSE, TRUE, TRUE,
97: "rdelim", &Rdelpar[0], FALSE, TRUE, TRUE,
98: 0
99: };
100:
101:
102: /*
103: ** SYSMOD -- Modify system catalogs to a predetermined
104: ** storage structure with predetermined keys.
105: **
106: ** Flags:
107: ** '-Rsystem relation name' will modify
108: ** only the named relations
109: **
110: ** Trace flags:
111: ** -S99
112: **
113: */
114:
115: sysfunc (pc, pv)
116: int pc;
117: PARM *pv;
118: {
119: register int i;
120: register int j;
121: register char **av;
122: char *p;
123: char *argptr;
124:
125:
126: # ifdef xSTR1
127: if (tTf(99,0))
128: {
129: printf("SYSFUNC: starting. \n");
130: prvect(pc, pv);
131: }
132: # endif
133:
134: /*
135: ** if there are any arguments, verify that they are valid
136: ** names of relations which can be modified by this program.
137: ** if there are no arguments, assume all system relations are to be
138: ** modified.
139: */
140:
141: if (pv[0].pv_val.pv_str != NULL)
142: if ((pv[1].pv_val.pv_str == NULL) && sequal(argptr = &pv[0].pv_val.pv_str[2], "all"))
143: for (i = 0; Modtabl[i].rname; i++)
144: Modtabl[i].goahead = TRUE;
145: else
146: for ( i = 0; i <= pc; i++)
147: {
148: av = &pv[i].pv_val.pv_str;
149: if (( p = *av) == NULL)
150: break;
151:
152: argptr = &p[2];
153: for (j = 0; Modtabl[j].rname; j++)
154: {
155: if (sequal(argptr, Modtabl[j].rname))
156: {
157: if (Modtabl[j].goahead)
158: {
159: printf("%s duplicate relation name\n", p);
160: return(1);
161: }
162: Modtabl[j].goahead = TRUE;
163: break;
164: }
165: }
166: if ((!Modtabl[j].rname) && !(p[1] == 'Z'))
167: {
168: printf("%s is not a system relation\n", p);
169: return(1);
170: }
171: }
172: else
173: for (i = 0; Modtabl[i].rname; i++)
174: Modtabl[i].goahead = Modtabl[i].normgo;
175:
176: for (i = 0; Modtabl[i].rname; i++)
177: {
178: if (Modtabl[i].goahead == 0 || optn_rel(&Modtabl[i]))
179: continue;
180: argptr = Modtabl[i].rname;
181: printf("modifying %s\n", argptr);
182: av = Modtabl[i].parvec;
183: j = 0;
184: initp();
185: while (*av != NULL)
186: {
187: setp(PV_STR, *av);
188: av++;
189: }
190:
191: call( mdMODIFY, NULL);
192: }
193: printf("sysmod done\n");
194: return(0);
195: }
196:
197:
198: optn_rel(mx)
199: struct modtabl *mx;
200: {
201: register struct modtabl *m;
202: register int ret;
203: char *temp;
204:
205: struct descriptor des;
206:
207: m = mx;
208: ret = FALSE;
209:
210: if (m->optn)
211: {
212: if (openr(&des, OR_RELTID, m->rname))
213: {
214: ret = TRUE;
215: }
216: }
217: return (ret);
218: }
219:
220: /* rubproc()
221: {
222: printf("sysmod interrupted\n");
223: return(1);
224: } */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.