10
10
*
11
11
*
12
12
* IDENTIFICATION
13
- * $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 1.31 1997/04/23 03:17:00 scrappy Exp $
13
+ * $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 1.32 1997/04/23 06:04:42 vadim Exp $
14
14
*
15
15
* HISTORY
16
16
* AUTHOR DATE MAJOR EVENT
@@ -128,14 +128,14 @@ static Node *makeA_Expr(int oper, char *opname, Node *lexpr, Node *rexpr);
128
128
tableElementList, OptInherit, definition,
129
129
opt_with, def_args, def_name_list, func_argtypes,
130
130
oper_argtypes, OptStmtList, OptStmtBlock, OptStmtMulti,
131
- opt_column_list, columnList,
131
+ opt_column_list, columnList, opt_va_list, va_list,
132
132
sort_clause, sortby_list, index_params, index_list,
133
133
name_list, from_clause, from_list, opt_array_bounds, nest_array_bounds,
134
134
expr_list, attrs, res_target_list, res_target_list2,
135
135
def_list, opt_indirection, group_clause, groupby_list
136
136
137
137
%type <boolean> opt_inh_star, opt_binary, opt_instead, opt_with_copy,
138
- index_opt_unique, opt_verbose
138
+ index_opt_unique, opt_verbose, opt_analyze
139
139
140
140
%type <ival> copy_dirn, archive_type, OptArchiveType, OptArchiveLocation,
141
141
def_type, opt_direction, remove_type, opt_column, event
@@ -179,11 +179,12 @@ static Node *makeA_Expr(int oper, char *opname, Node *lexpr, Node *rexpr);
179
179
*/
180
180
181
181
/* Keywords */
182
- %token ABORT_TRANS, ACL, ADD, AFTER, AGGREGATE, ALL, ALTER, AND, APPEND,
183
- ARCHIVE, ARCH_STORE, AS, ASC, BACKWARD, BEFORE, BEGIN_TRANS, BETWEEN,
184
- BINARY, BY, CAST, CHANGE, CLOSE, CLUSTER, COLUMN, COMMIT, COPY, CREATE,
185
- CURRENT, CURSOR, DATABASE, DECLARE, DELETE, DELIMITERS, DESC, DISTINCT,
186
- DO, DROP, END_TRANS,
182
+ %token ABORT_TRANS, ACL, ADD, AFTER, AGGREGATE, ALL, ALTER, ANALYZE,
183
+ AND, APPEND, ARCHIVE, ARCH_STORE, AS, ASC,
184
+ BACKWARD, BEFORE, BEGIN_TRANS, BETWEEN, BINARY, BY,
185
+ CAST, CHANGE, CLOSE, CLUSTER, COLUMN, COMMIT, COPY, CREATE,
186
+ CURRENT, CURSOR, DATABASE, DECLARE, DELETE, DELIMITERS, DESC,
187
+ DISTINCT, DO, DROP, END_TRANS,
187
188
EXTEND, FETCH, FOR, FORWARD, FROM, FUNCTION, GRANT, GROUP,
188
189
HAVING, HEAVY, IN, INDEX, INHERITS, INSERT, INSTEAD, INTO, IS,
189
190
ISNULL, LANGUAGE, LIGHT, LISTEN, LOAD, MERGE, MOVE, NEW,
@@ -288,11 +289,10 @@ stmt : AddAttrStmt
288
289
289
290
VariableSetStmt: SET var_name TO var_value
290
291
{
291
- VariableSetStmt *n = makeNode(VariableSetStmt);
292
- n->name = $2;
293
- n->value = $4;
294
-
295
- $$ = (Node *) n;
292
+ VariableSetStmt *n = makeNode(VariableSetStmt);
293
+ n->name = $2;
294
+ n->value = $4;
295
+ $$ = (Node *) n;
296
296
}
297
297
;
298
298
@@ -301,21 +301,17 @@ var_value: Sconst { $$ = $1; }
301
301
302
302
VariableShowStmt: SHOW var_name
303
303
{
304
- VariableSetStmt *n = makeNode(VariableSetStmt);
305
- n->name = $2;
306
- n->value = NULL;
307
-
308
- $$ = (Node *) n;
304
+ VariableShowStmt *n = makeNode(VariableShowStmt);
305
+ n->name = $2;
306
+ $$ = (Node *) n;
309
307
}
310
308
;
311
309
312
310
VariableResetStmt: RESET var_name
313
311
{
314
- VariableSetStmt *n = makeNode(VariableSetStmt);
315
- n->name = $2;
316
- n->value = NULL;
317
-
318
- $$ = (Node *) n;
312
+ VariableResetStmt *n = makeNode(VariableResetStmt);
313
+ n->name = $2;
314
+ $$ = (Node *) n;
319
315
}
320
316
;
321
317
@@ -1295,24 +1291,47 @@ ClusterStmt: CLUSTER index_name ON relation_name
1295
1291
*
1296
1292
*****************************************************************************/
1297
1293
1298
- VacuumStmt: VACUUM opt_verbose
1294
+ VacuumStmt: VACUUM opt_verbose opt_analyze
1299
1295
{
1300
1296
VacuumStmt *n = makeNode(VacuumStmt);
1301
1297
n->verbose = $2;
1298
+ n->analyze = $3;
1299
+ n->vacrel = NULL;
1300
+ n->va_spec = NIL;
1302
1301
$$ = (Node *)n;
1303
1302
}
1304
- | VACUUM opt_verbose relation_name
1303
+ | VACUUM opt_verbose relation_name opt_analyze opt_va_list
1305
1304
{
1306
1305
VacuumStmt *n = makeNode(VacuumStmt);
1307
1306
n->verbose = $2;
1307
+ n->analyze = $4;
1308
1308
n->vacrel = $3;
1309
+ n->va_spec = $5;
1310
+ if ( $5 != NIL && !$4 )
1311
+ elog (WARN, "parser: syntax error at or near \"(\"");
1309
1312
$$ = (Node *)n;
1310
1313
}
1311
1314
;
1312
1315
1313
1316
opt_verbose: VERBOSE { $$ = TRUE; }
1314
1317
| /* EMPTY */ { $$ = FALSE; }
1315
1318
;
1319
+
1320
+ opt_analyze: ANALYZE { $$ = TRUE; }
1321
+ | /* EMPTY */ { $$ = FALSE; }
1322
+ ;
1323
+
1324
+ opt_va_list: '(' va_list ')'
1325
+ { $$ = $2; }
1326
+ | /* EMPTY */
1327
+ { $$ = NIL; }
1328
+ ;
1329
+
1330
+ va_list: name
1331
+ { $$=lcons($1,NIL); }
1332
+ | va_list ',' name
1333
+ { $$=lappend($1,$3); }
1334
+ ;
1316
1335
1317
1336
/*****************************************************************************
1318
1337
*
0 commit comments