Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 561aead

Browse files
author
Thomas G. Lockhart
committed
Allow parsing expressions with ") -" (scan.l, scan.c only).
Make "TABLE" optional in "LOCK TABLE" command and "... INTO TABLE..." clause. Explicitly parse CREATE SEQUENCE options to allow a negative integer as an argument; this is an artifact of unary minus handling in scan.l. Add "PASSWORD" as an allowed column identifier. These fixes will require a "make clean install" but not a dump/reload.
1 parent c530fbf commit 561aead

File tree

6 files changed

+5035
-4848
lines changed

6 files changed

+5035
-4848
lines changed

src/backend/parser/gram.c

Lines changed: 4694 additions & 4566 deletions
Large diffs are not rendered by default.

src/backend/parser/gram.y

Lines changed: 66 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
*
1111
*
1212
* IDENTIFICATION
13-
* $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.6 1998/03/07 06:04:59 thomas Exp $
13+
* $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.7 1998/03/18 16:50:19 thomas Exp $
1414
*
1515
* HISTORY
1616
* AUTHOR DATE MAJOR EVENT
@@ -170,6 +170,7 @@ Oid param_type(int t); /* used in parse_expr.c */
170170
%type <sortgroupby>
171171
join_using
172172
%type <boolean> opt_union
173+
%type <boolean> opt_table
173174

174175
%type <node> position_expr
175176
%type <list> extract_list, position_list
@@ -202,6 +203,7 @@ Oid param_type(int t); /* used in parse_expr.c */
202203
%type <list> OptCreateAs, CreateAsList
203204
%type <node> CreateAsElement
204205
%type <value> NumConst
206+
%type <value> IntegerOnly
205207
%type <attr> event_object, attr
206208
%type <sortgroupby> groupby
207209
%type <sortgroupby> sortby
@@ -277,14 +279,14 @@ Oid param_type(int t); /* used in parse_expr.c */
277279

278280
/* Keywords for Postgres support (not in SQL92 reserved words) */
279281
%token ABORT_TRANS, AFTER, AGGREGATE, ANALYZE,
280-
BACKWARD, BEFORE, BINARY, CLUSTER, COPY,
282+
BACKWARD, BEFORE, BINARY, CACHE, CLUSTER, COPY, CYCLE,
281283
DATABASE, DELIMITERS, DO, EACH, EXPLAIN, EXTEND,
282284
FORWARD, FUNCTION, HANDLER,
283-
INDEX, INHERITS, INSTEAD, ISNULL,
284-
LANCOMPILER, LISTEN, LOAD, LOCK_P, LOCATION, MOVE,
285+
INCREMENT, INDEX, INHERITS, INSTEAD, ISNULL,
286+
LANCOMPILER, LISTEN, LOAD, LOCK_P, LOCATION, MAXVALUE, MINVALUE, MOVE,
285287
NEW, NONE, NOTHING, NOTNULL, OIDS, OPERATOR, PROCEDURAL,
286288
RECIPE, RENAME, RESET, RETURNS, ROW, RULE,
287-
SEQUENCE, SETOF, SHOW, STATEMENT, STDIN, STDOUT, TRUSTED,
289+
SEQUENCE, SETOF, SHOW, START, STATEMENT, STDIN, STDOUT, TRUSTED,
288290
VACUUM, VERBOSE, VERSION
289291

290292
/* Keywords (obsolete; retain through next version for parser - thomas 1997-12-04) */
@@ -1094,7 +1096,7 @@ CreateAsElement: ColId
10941096
*
10951097
*****************************************************************************/
10961098

1097-
CreateSeqStmt: CREATE SEQUENCE relation_name OptSeqList
1099+
CreateSeqStmt: CREATE SEQUENCE relation_name OptSeqList
10981100
{
10991101
CreateSeqStmt *n = makeNode(CreateSeqStmt);
11001102
n->seqname = $3;
@@ -1103,24 +1105,58 @@ CreateSeqStmt: CREATE SEQUENCE relation_name OptSeqList
11031105
}
11041106
;
11051107

1106-
OptSeqList:
1107-
OptSeqList OptSeqElem
1108+
OptSeqList: OptSeqList OptSeqElem
11081109
{ $$ = lappend($1, $2); }
1109-
| { $$ = NIL; }
1110+
| { $$ = NIL; }
11101111
;
11111112

1112-
OptSeqElem: IDENT NumConst
1113+
OptSeqElem: CACHE IntegerOnly
11131114
{
11141115
$$ = makeNode(DefElem);
1115-
$$->defname = $1;
1116+
$$->defname = "cache";
11161117
$$->arg = (Node *)$2;
11171118
}
1118-
| IDENT
1119+
| CYCLE
11191120
{
11201121
$$ = makeNode(DefElem);
1121-
$$->defname = $1;
1122+
$$->defname = "cycle";
11221123
$$->arg = (Node *)NULL;
11231124
}
1125+
| INCREMENT IntegerOnly
1126+
{
1127+
$$ = makeNode(DefElem);
1128+
$$->defname = "increment";
1129+
$$->arg = (Node *)$2;
1130+
}
1131+
| MAXVALUE IntegerOnly
1132+
{
1133+
$$ = makeNode(DefElem);
1134+
$$->defname = "maxvalue";
1135+
$$->arg = (Node *)$2;
1136+
}
1137+
| MINVALUE IntegerOnly
1138+
{
1139+
$$ = makeNode(DefElem);
1140+
$$->defname = "minvalue";
1141+
$$->arg = (Node *)$2;
1142+
}
1143+
| START IntegerOnly
1144+
{
1145+
$$ = makeNode(DefElem);
1146+
$$->defname = "start";
1147+
$$->arg = (Node *)$2;
1148+
}
1149+
;
1150+
1151+
IntegerOnly: Iconst
1152+
{
1153+
$$ = makeInteger($1);
1154+
}
1155+
| '-' Iconst
1156+
{
1157+
$$ = makeInteger($2);
1158+
$$->val.ival = - $$->val.ival;
1159+
}
11241160
;
11251161

11261162
/*****************************************************************************
@@ -1856,7 +1892,7 @@ event: SELECT { $$ = CMD_SELECT; }
18561892
;
18571893

18581894
opt_instead: INSTEAD { $$ = TRUE; }
1859-
| /*EMPTY*/ { $$ = FALSE; }
1895+
| /*EMPTY*/ { $$ = FALSE; }
18601896
;
18611897

18621898

@@ -2101,10 +2137,8 @@ opt_analyze: ANALYZE { $$ = TRUE; }
21012137
| /*EMPTY*/ { $$ = FALSE; }
21022138
;
21032139

2104-
opt_va_list: '(' va_list ')'
2105-
{ $$ = $2; }
2106-
| /* EMPTY */
2107-
{ $$ = NIL; }
2140+
opt_va_list: '(' va_list ')' { $$ = $2; }
2141+
| /*EMPTY*/ { $$ = NIL; }
21082142
;
21092143

21102144
va_list: name
@@ -2236,7 +2270,7 @@ DeleteStmt: DELETE FROM relation_name
22362270
* Is it worth making this a separate command, with
22372271
* its own node type and file. I don't think so. bjm 1998/1/22
22382272
*/
2239-
LockStmt: LOCK_P relation_name
2273+
LockStmt: LOCK_P opt_table relation_name
22402274
{
22412275
DeleteStmt *n = makeNode(DeleteStmt);
22422276
A_Const *c = makeNode(A_Const);
@@ -2247,7 +2281,7 @@ LockStmt: LOCK_P relation_name
22472281
c->typename->name = xlateSqlType("bool");
22482282
c->typename->typmod = -1;
22492283

2250-
n->relname = $2;
2284+
n->relname = $3;
22512285
n->whereClause = (Node *)c;
22522286
$$ = (Node *)n;
22532287
}
@@ -2378,10 +2412,12 @@ SubSelect: SELECT opt_unique res_target_list2
23782412
}
23792413
;
23802414

2381-
result: INTO TABLE relation_name
2382-
{ $$= $3; }
2383-
| /*EMPTY*/
2384-
{ $$ = NULL; }
2415+
result: INTO opt_table relation_name { $$= $3; }
2416+
| /*EMPTY*/ { $$ = NULL; }
2417+
;
2418+
2419+
opt_table: TABLE { $$ = TRUE; }
2420+
| /*EMPTY*/ { $$ = FALSE; }
23852421
;
23862422

23872423
opt_union: ALL { $$ = TRUE; }
@@ -4603,18 +4639,24 @@ TypeId: ColId
46034639
ColId: IDENT { $$ = $1; }
46044640
| datetime { $$ = $1; }
46054641
| ACTION { $$ = "action"; }
4642+
| CACHE { $$ = "cache"; }
4643+
| CYCLE { $$ = "cycle"; }
46064644
| DATABASE { $$ = "database"; }
46074645
| DELIMITERS { $$ = "delimiters"; }
46084646
| DOUBLE { $$ = "double"; }
46094647
| EACH { $$ = "each"; }
46104648
| FUNCTION { $$ = "function"; }
4649+
| INCREMENT { $$ = "increment"; }
46114650
| INDEX { $$ = "index"; }
46124651
| KEY { $$ = "key"; }
46134652
| LANGUAGE { $$ = "language"; }
46144653
| LOCATION { $$ = "location"; }
46154654
| MATCH { $$ = "match"; }
4655+
| MAXVALUE { $$ = "maxvalue"; }
4656+
| MINVALUE { $$ = "minvalue"; }
46164657
| OPERATOR { $$ = "operator"; }
46174658
| OPTION { $$ = "option"; }
4659+
| PASSWORD { $$ = "password"; }
46184660
| PRIVILEGES { $$ = "privileges"; }
46194661
| RECIPE { $$ = "recipe"; }
46204662
| ROW { $$ = "row"; }

src/backend/parser/keywords.c

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
*
88
*
99
* IDENTIFICATION
10-
* $Header: /cvsroot/pgsql/src/backend/parser/keywords.c,v 1.35 1998/02/11 04:09:54 thomas Exp $
10+
* $Header: /cvsroot/pgsql/src/backend/parser/keywords.c,v 1.36 1998/03/18 16:50:21 thomas Exp $
1111
*
1212
*-------------------------------------------------------------------------
1313
*/
@@ -49,6 +49,7 @@ static ScanKeyword ScanKeywords[] = {
4949
{"binary", BINARY},
5050
{"both", BOTH},
5151
{"by", BY},
52+
{"cache", CACHE},
5253
{"cascade", CASCADE},
5354
{"cast", CAST},
5455
{"char", CHAR},
@@ -71,6 +72,7 @@ static ScanKeyword ScanKeywords[] = {
7172
{"current_timestamp", CURRENT_TIMESTAMP},
7273
{"current_user", CURRENT_USER},
7374
{"cursor", CURSOR},
75+
{"cycle", CYCLE},
7476
{"database", DATABASE},
7577
{"day", DAY_P},
7678
{"decimal", DECIMAL},
@@ -105,6 +107,7 @@ static ScanKeyword ScanKeywords[] = {
105107
{"having", HAVING},
106108
{"hour", HOUR_P},
107109
{"in", IN},
110+
{"increment", INCREMENT},
108111
{"index", INDEX},
109112
{"inherits", INHERITS},
110113
{"inner", INNER_P},
@@ -127,7 +130,9 @@ static ScanKeyword ScanKeywords[] = {
127130
{"location", LOCATION},
128131
{"lock", LOCK_P},
129132
{"match", MATCH},
133+
{"maxvalue", MAXVALUE},
130134
{"minute", MINUTE_P},
135+
{"minvalue", MINVALUE},
131136
{"month", MONTH_P},
132137
{"move", MOVE},
133138
{"national", NATIONAL},
@@ -176,6 +181,7 @@ static ScanKeyword ScanKeywords[] = {
176181
{"set", SET},
177182
{"setof", SETOF},
178183
{"show", SHOW},
184+
{"start", START},
179185
{"statement", STATEMENT},
180186
{"stdin", STDIN},
181187
{"stdout", STDOUT},

src/backend/parser/parse.h

Lines changed: 69 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -156,69 +156,75 @@ typedef union
156156
#define BACKWARD 383
157157
#define BEFORE 384
158158
#define BINARY 385
159-
#define CLUSTER 386
160-
#define COPY 387
161-
#define DATABASE 388
162-
#define DELIMITERS 389
163-
#define DO 390
164-
#define EACH 391
165-
#define EXPLAIN 392
166-
#define EXTEND 393
167-
#define FORWARD 394
168-
#define FUNCTION 395
169-
#define HANDLER 396
170-
#define INDEX 397
171-
#define INHERITS 398
172-
#define INSTEAD 399
173-
#define ISNULL 400
174-
#define LANCOMPILER 401
175-
#define LISTEN 402
176-
#define LOAD 403
177-
#define LOCK_P 404
178-
#define LOCATION 405
179-
#define MOVE 406
180-
#define NEW 407
181-
#define NONE 408
182-
#define NOTHING 409
183-
#define NOTNULL 410
184-
#define OIDS 411
185-
#define OPERATOR 412
186-
#define PROCEDURAL 413
187-
#define RECIPE 414
188-
#define RENAME 415
189-
#define RESET 416
190-
#define RETURNS 417
191-
#define ROW 418
192-
#define RULE 419
193-
#define SEQUENCE 420
194-
#define SETOF 421
195-
#define SHOW 422
196-
#define STATEMENT 423
197-
#define STDIN 424
198-
#define STDOUT 425
199-
#define TRUSTED 426
200-
#define VACUUM 427
201-
#define VERBOSE 428
202-
#define VERSION 429
203-
#define ARCHIVE 430
204-
#define USER 431
205-
#define PASSWORD 432
206-
#define CREATEDB 433
207-
#define NOCREATEDB 434
208-
#define CREATEUSER 435
209-
#define NOCREATEUSER 436
210-
#define VALID 437
211-
#define UNTIL 438
212-
#define IDENT 439
213-
#define SCONST 440
214-
#define Op 441
215-
#define ICONST 442
216-
#define PARAM 443
217-
#define FCONST 444
218-
#define OP 445
219-
#define UMINUS 446
220-
#define TYPECAST 447
221-
#define REDUCE 448
159+
#define CACHE 386
160+
#define CLUSTER 387
161+
#define COPY 388
162+
#define CYCLE 389
163+
#define DATABASE 390
164+
#define DELIMITERS 391
165+
#define DO 392
166+
#define EACH 393
167+
#define EXPLAIN 394
168+
#define EXTEND 395
169+
#define FORWARD 396
170+
#define FUNCTION 397
171+
#define HANDLER 398
172+
#define INCREMENT 399
173+
#define INDEX 400
174+
#define INHERITS 401
175+
#define INSTEAD 402
176+
#define ISNULL 403
177+
#define LANCOMPILER 404
178+
#define LISTEN 405
179+
#define LOAD 406
180+
#define LOCK_P 407
181+
#define LOCATION 408
182+
#define MAXVALUE 409
183+
#define MINVALUE 410
184+
#define MOVE 411
185+
#define NEW 412
186+
#define NONE 413
187+
#define NOTHING 414
188+
#define NOTNULL 415
189+
#define OIDS 416
190+
#define OPERATOR 417
191+
#define PROCEDURAL 418
192+
#define RECIPE 419
193+
#define RENAME 420
194+
#define RESET 421
195+
#define RETURNS 422
196+
#define ROW 423
197+
#define RULE 424
198+
#define SEQUENCE 425
199+
#define SETOF 426
200+
#define SHOW 427
201+
#define START 428
202+
#define STATEMENT 429
203+
#define STDIN 430
204+
#define STDOUT 431
205+
#define TRUSTED 432
206+
#define VACUUM 433
207+
#define VERBOSE 434
208+
#define VERSION 435
209+
#define ARCHIVE 436
210+
#define USER 437
211+
#define PASSWORD 438
212+
#define CREATEDB 439
213+
#define NOCREATEDB 440
214+
#define CREATEUSER 441
215+
#define NOCREATEUSER 442
216+
#define VALID 443
217+
#define UNTIL 444
218+
#define IDENT 445
219+
#define SCONST 446
220+
#define Op 447
221+
#define ICONST 448
222+
#define PARAM 449
223+
#define FCONST 450
224+
#define OP 451
225+
#define UMINUS 452
226+
#define TYPECAST 453
227+
#define REDUCE 454
222228

223229

224230
extern YYSTYPE yylval;

0 commit comments

Comments
 (0)