|
14 | 14 | * |
15 | 15 | * |
16 | 16 | * IDENTIFICATION |
17 | | - * $Header: /cvsroot/pgsql/src/backend/commands/cluster.c,v 1.1.1.1 1996/07/09 06:21:19 scrappy Exp $ |
| 17 | + * $Header: /cvsroot/pgsql/src/backend/commands/cluster.c,v 1.2 1996/08/15 07:39:24 scrappy Exp $ |
18 | 18 | * |
19 | 19 | *------------------------------------------------------------------------- |
20 | 20 | */ |
@@ -105,9 +105,18 @@ cluster(char oldrelname[], char oldindexname[]) |
105 | 105 | RelationOldHeap,OldIndex; |
106 | 106 | RelationNewHeap; |
107 | 107 |
|
108 | | -char*NewIndexName; |
109 | | -char*szNewHeapName; |
110 | | - |
| 108 | +charNewIndexName[NAMEDATALEN+1]; |
| 109 | +charNewHeapName[NAMEDATALEN+1]; |
| 110 | +charsaveoldrelname[NAMEDATALEN+1]; |
| 111 | +charsaveoldindexname[NAMEDATALEN+1]; |
| 112 | + |
| 113 | + |
| 114 | +/* Save the old names because they will get lost when the old relations |
| 115 | + * are destroyed. |
| 116 | + */ |
| 117 | +strcpy(saveoldrelname,oldrelname); |
| 118 | +strcpy(saveoldindexname,oldindexname); |
| 119 | + |
111 | 120 | /* |
112 | 121 | * |
113 | 122 | * I'm going to force all checking back into the commands.c function. |
@@ -153,55 +162,42 @@ cluster(char oldrelname[], char oldindexname[]) |
153 | 162 | */ |
154 | 163 | NewHeap=copy_heap(OIDOldHeap); |
155 | 164 | OIDNewHeap=NewHeap->rd_id; |
156 | | -szNewHeapName=pstrdup(NewHeap->rd_rel->relname.data); |
| 165 | +strcpy(NewHeapName,NewHeap->rd_rel->relname.data); |
| 166 | + |
157 | 167 |
|
158 | | -/*Need to do this tomake the new heap visible. */ |
| 168 | +/*Tomake the new heap visible (which is until now empty). */ |
159 | 169 | CommandCounterIncrement(); |
160 | 170 |
|
161 | 171 | rebuildheap(OIDNewHeap,OIDOldHeap,OIDOldIndex); |
162 | 172 |
|
163 | | -/*Need to do this to makethenew heap visible. */ |
| 173 | +/*To flush the filled new heap (andthestatistics about it). */ |
164 | 174 | CommandCounterIncrement(); |
165 | 175 |
|
166 | | -/* can't be found in the SysCache. */ |
167 | | -copy_index(OIDOldIndex,OIDNewHeap);/* No contention with the old */ |
| 176 | +/* Create new index over the tuples of the new heap. */ |
| 177 | +copy_index(OIDOldIndex,OIDNewHeap); |
| 178 | +sprintf(NewIndexName,"temp_%x",OIDOldIndex); |
168 | 179 |
|
169 | 180 | /* |
170 | 181 | * make this really happen. Flush all the buffers. |
| 182 | + * (Believe me, it is necessary ... ended up in a mess without it.) |
171 | 183 | */ |
172 | 184 | CommitTransactionCommand(); |
173 | 185 | StartTransactionCommand(); |
174 | | - |
175 | | -/* |
176 | | - * Questionable bit here. Because the renamerel destroys all trace of the |
177 | | - * pre-existing relation, I'm going to Destroy old, and then rename new |
178 | | - * to old. If this fails, it fails, and you lose your old. Tough - say |
179 | | - * I. Have good backups! |
180 | | - */ |
181 | 186 |
|
182 | | -/* |
183 | | - Here lies the bogosity. The RelationNameGetRelation returns a bad |
184 | | - list of TupleDescriptors. Damn. Can't work out why this is. |
185 | | - */ |
186 | | - |
187 | | -heap_destroy(oldrelname);/* AAAAAAAAGH!! */ |
188 | | - |
189 | | -CommandCounterIncrement(); |
| 187 | + |
| 188 | +/* Destroy old heap (along with its index) and rename new. */ |
| 189 | +heap_destroy(oldrelname); |
190 | 190 |
|
191 | | -/* |
192 | | - * The Commit flushes all palloced memory, so I have to grab the |
193 | | - * New stuff again. This is annoying, but oh heck! |
| 191 | +renamerel(NewHeapName,saveoldrelname); |
| 192 | +TypeRename(NewHeapName,saveoldrelname); |
| 193 | + |
| 194 | +renamerel(NewIndexName,saveoldindexname); |
| 195 | + |
| 196 | +/* |
| 197 | + * Again flush all the buffers. |
194 | 198 | */ |
195 | | -/* |
196 | | - renamerel(szNewHeapName.data, oldrelname); |
197 | | - TypeRename(&szNewHeapName, &szOldRelName); |
198 | | -
|
199 | | - sprintf(NewIndexName.data, "temp_%x", OIDOldIndex); |
200 | | - renamerel(NewIndexName.data, szOldIndexName.data); |
201 | | -*/ |
202 | | -NewIndexName=palloc(NAMEDATALEN+1);/* XXX */ |
203 | | -sprintf(NewIndexName,"temp_%x",OIDOldIndex); |
204 | | -renamerel(NewIndexName,oldindexname); |
| 199 | +CommitTransactionCommand(); |
| 200 | +StartTransactionCommand(); |
205 | 201 | } |
206 | 202 |
|
207 | 203 | Relation |
@@ -362,6 +358,7 @@ rebuildheap(Oid OIDNewHeap, Oid OIDOldHeap, Oid OIDOldIndex) |
362 | 358 | pfree(ScanResult); |
363 | 359 | ReleaseBuffer(LocalBuffer); |
364 | 360 | } |
| 361 | +index_endscan(ScanDesc); |
365 | 362 |
|
366 | 363 | index_close(LocalOldIndex); |
367 | 364 | heap_close(LocalOldHeap); |
|