|
|
1.1 root 1: # include <sccs.h>
2:
3: SCCSID(@(#)indconv.q 8.1 12/31/84)
4:
5:
6: # define MAXNAME 12
7: # define M_HEAP 5
8: # define M_ISAM 11
9: # define M_HASH 21
10:
11: ## char *Usercode;
12: struct
13: {
14: char relname[MAXNAME + 1], indname[MAXNAME + 1], relsp[10];
15: char domname[7][MAXNAME + 1], modseq[7];
16: } Indinfo[100];
17:
18: struct relspec
19: {
20: char specnum, *specname;
21: };
22:
23: struct relspec relspecs[]
24: {
25: M_ISAM, "isam",
26: M_HASH, "hash",
27: -M_ISAM, "cisam",
28: -M_HASH, "chash",
29: M_HEAP, "heap",
30: -M_HEAP, "cheap",
31: 0
32: };
33:
34: main(argc, argv)
35: int argc;
36: char *argv[];
37: {
38: char *kp;
39: ## char aname[20];
40: ## char keystring[100];
41: ## char pname[20], iname[20];
42: ## char *db;
43: ## int cnt, i, j, rspec, aid, akey;
44:
45: if (argc != 2)
46: syserr(0, "wrong number of parameters");
47: db = argv[1];
48: if (initucode(db, 0, 0, 0, 0))
49: syserr(0, "cannot access %s data base", db);
50: ## ingres db "-nheap"
51: cnt = 0;
52: ## range of r is relation
53: ## retrieve (iname = r.relid, rspec = r.relspec)
54: ## where r.relindxd < 0 and r.relindxd != -2 and r.relowner = Usercode
55: ## {
56: smove(iname, Indinfo[cnt].indname);
57: for (i = 0; relspecs[i].specnum != 0; i++)
58: {
59: if (rspec == relspecs[i].specnum)
60: {
61: smove(relspecs[i].specname, Indinfo[cnt].relsp);
62: break;
63: }
64: }
65: for (i = 0; i < 7; i++)
66: Indinfo[cnt].modseq[i] = -1;
67: if (++cnt >= 100)
68: {
69: printf("There are more indices than I can convert\n");
70: printf("\tso run me again to finish the rest\n");
71: break;
72: }
73: ## }
74: ## range of x is indexes
75: ## retrieve (pname = x.irelidp, iname = x.irelidi)
76: ## where x.iownerp = Usercode
77: ## {
78: for (i = 0; i < cnt; i++)
79: {
80: if (sequal(iname, Indinfo[i].indname))
81: {
82: smove(pname, Indinfo[i].relname);
83: break;
84: }
85: }
86: ## }
87: ## range of a is attribute
88: ## retrieve (iname = a.attrelid, aname = a.attname, aid = a.attid,
89: ## akey = a.attxtra)
90: ## where a.attowner = Usercode
91: ## {
92: for (i = 0; i < cnt; i++)
93: {
94: if (sequal(iname, Indinfo[i].indname))
95: {
96: if (akey > 0)
97: Indinfo[i].modseq[akey - 1] = aid - 1;
98: smove(aname, Indinfo[i].domname[aid - 1]);
99: break;
100: }
101: }
102: ## }
103:
104: for (i = 0; i < cnt; i++)
105: {
106: smove(Indinfo[i].indname, iname);
107: ## destroy iname
108: }
109: for (i = 0; i < cnt; i++)
110: {
111: kp = &keystring[0];
112: for (j = 0; j < 7; j++)
113: {
114: if (sequal("tidp", Indinfo[i].domname[j]))
115: break;
116: if (j > 0)
117: xmove(", ", &kp);
118: xmove(Indinfo[i].domname[j], &kp);
119: }
120: smove(Indinfo[i].relname, pname);
121: smove(Indinfo[i].indname, iname);
122: ## index on pname is iname (keystring)
123: }
124: for (i = 0; i < cnt; i++)
125: {
126: kp = &keystring[0];
127: for (j = 0; j < 7 && Indinfo[i].modseq[j] != -1; j++)
128: {
129: if (j > 0)
130: xmove(", ", &kp);
131: xmove(Indinfo[i].domname[Indinfo[i].modseq[j]], &kp);
132: }
133: smove(Indinfo[i].indname, iname);
134: smove(Indinfo[i].relsp, pname);
135: if (j == 0)
136: {
137: ## modify iname to pname
138: printf("write to Bob Epstein for a free INGRES T-shirt\n");
139: }
140: else
141: {
142: ## modify iname to pname on keystring
143: }
144: printf("index %s converted.\n", iname);
145: }
146: printf("done\n");
147: }
148:
149: sequal(ax, bx)
150: char *ax, *bx;
151: {
152: register char *a, *b;
153:
154: a = --ax;
155: b = --bx;
156: while (*++a == *++b)
157: if (*a == 0)
158: return (1);
159: if (*a == 0)
160: {
161: while (*b == ' ')
162: b++;
163: if (*b)
164: return (0);
165: return (1);
166: }
167: if (*b == 0)
168: {
169: while (*a == ' ')
170: a++;
171: if (*a)
172: return (0);
173: return (1);
174: }
175: return (0);
176: }
177:
178: smove(ax, bx)
179: char *ax, *bx;
180: {
181: register char *a, *b;
182:
183: a = ax;
184: b = bx;
185: while (*b++ = *a++);
186: return (0);
187: }
188:
189: xmove(ax, bx)
190: char *ax, **bx;
191: {
192: register char *a, *b;
193:
194: a = ax;
195: b = *bx;
196: while (*b++ = *a++);
197: *bx = --b;
198: return (0);
199: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.