7
7
*
8
8
*
9
9
* IDENTIFICATION
10
- * $Header: /cvsroot/pgsql/src/backend/commands/vacuum.c,v 1.1.1.1 1996/07/09 06:21:22 scrappy Exp $
10
+ * $Header: /cvsroot/pgsql/src/backend/commands/vacuum.c,v 1.1.1.1.2.1 1996/10/04 20:37:09 scrappy Exp $
11
11
*
12
12
*-------------------------------------------------------------------------
13
13
*/
44
44
bool VacuumRunning = false;
45
45
46
46
/* non-export function prototypes */
47
- static void _vc_init (char * vacrel );
48
- static void _vc_shutdown (char * vacrel );
49
- static void _vc_vacuum (char * vacrel );
50
- static VRelList _vc_getrels (Portal p , char * vacrel );
47
+ static void _vc_init (void );
48
+ static void _vc_shutdown (void );
49
+ static void _vc_vacuum (NameData * VacRelP );
50
+ static VRelList _vc_getrels (Portal p , NameData * VacRelP );
51
51
static void _vc_vacone (Portal p , VRelList curvrl );
52
52
static void _vc_vacheap (Portal p , VRelList curvrl , Relation onerel );
53
53
static void _vc_vacindices (VRelList curvrl , Relation onerel );
@@ -65,14 +65,24 @@ static bool _vc_isarchrel(char *rname);
65
65
void
66
66
vacuum (char * vacrel )
67
67
{
68
+ NameData VacRel ;
69
+
70
+ /* vacrel gets de-allocated on transaction commit */
71
+
68
72
/* initialize vacuum cleaner */
69
- _vc_init (vacrel );
73
+ _vc_init ();
70
74
71
75
/* vacuum the database */
72
- _vc_vacuum (vacrel );
76
+ if (vacrel )
77
+ {
78
+ strcpy (VacRel .data ,vacrel );
79
+ _vc_vacuum (& VacRel );
80
+ }
81
+ else
82
+ _vc_vacuum (NULL );
73
83
74
84
/* clean up */
75
- _vc_shutdown (vacrel );
85
+ _vc_shutdown ();
76
86
}
77
87
78
88
/*
@@ -93,7 +103,7 @@ vacuum(char *vacrel)
93
103
* PostgresMain().
94
104
*/
95
105
static void
96
- _vc_init (char * vacrel )
106
+ _vc_init ()
97
107
{
98
108
int fd ;
99
109
@@ -116,7 +126,7 @@ _vc_init(char *vacrel)
116
126
}
117
127
118
128
static void
119
- _vc_shutdown (char * vacrel )
129
+ _vc_shutdown ()
120
130
{
121
131
/* on entry, not in a transaction */
122
132
if (unlink ("pg_vlock" ) < 0 )
@@ -147,7 +157,7 @@ vc_abort()
147
157
* locks at one time.
148
158
*/
149
159
static void
150
- _vc_vacuum (char * vacrel )
160
+ _vc_vacuum (NameData * VacRelP )
151
161
{
152
162
VRelList vrl , cur ;
153
163
char * pname ;
@@ -166,7 +176,7 @@ _vc_vacuum(char *vacrel)
166
176
pfree (pname );
167
177
168
178
/* get list of relations */
169
- vrl = _vc_getrels (p , vacrel );
179
+ vrl = _vc_getrels (p , VacRelP );
170
180
171
181
/* vacuum each heap relation */
172
182
for (cur = vrl ; cur != (VRelList ) NULL ; cur = cur -> vrl_next )
@@ -178,7 +188,7 @@ _vc_vacuum(char *vacrel)
178
188
}
179
189
180
190
static VRelList
181
- _vc_getrels (Portal p , char * vacrel )
191
+ _vc_getrels (Portal p , NameData * VacRelP )
182
192
{
183
193
Relation pgclass ;
184
194
TupleDesc pgcdesc ;
@@ -196,10 +206,10 @@ _vc_getrels(Portal p, char *vacrel)
196
206
197
207
StartTransactionCommand ();
198
208
199
- if (vacrel ) {
209
+ if (VacRelP -> data ) {
200
210
ScanKeyEntryInitialize (& pgckey , 0x0 , Anum_pg_class_relname ,
201
211
NameEqualRegProcedure ,
202
- PointerGetDatum (vacrel ));
212
+ PointerGetDatum (VacRelP -> data ));
203
213
} else {
204
214
ScanKeyEntryInitialize (& pgckey , 0x0 , Anum_pg_class_relkind ,
205
215
CharacterEqualRegProcedure , CharGetDatum ('r' ));
0 commit comments