10
10
*
11
11
*
12
12
* IDENTIFICATION
13
- * $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 1.37 1997/08/20 01:12:02 vadim Exp $
13
+ * $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 1.38 1997/08/21 01:34:44 vadim Exp $
14
14
*
15
15
* HISTORY
16
16
* AUTHOR DATE MAJOR EVENT
@@ -84,6 +84,7 @@ static Node *makeA_Expr(int oper, char *opname, Node *lexpr, Node *rexpr);
84
84
Attr *attr;
85
85
86
86
ColumnDef *coldef;
87
+ ConstaintDef *constrdef;
87
88
TypeName *typnam;
88
89
DefElem *defelt;
89
90
ParamString *param;
@@ -118,7 +119,9 @@ static Node *makeA_Expr(int oper, char *opname, Node *lexpr, Node *rexpr);
118
119
%type <str> relation_name, copy_file_name, copy_delimiter, def_name,
119
120
database_name, access_method_clause, access_method, attr_name,
120
121
class, index_name, name, file_name, recipe_name,
121
- var_name, aggr_argtype, OptDefault, CheckElem
122
+ var_name, aggr_argtype, OptDefault
123
+
124
+ %type <constrdef> ConstraintElem, ConstraintDef
122
125
123
126
%type <str> opt_id, opt_portal_name,
124
127
before_clause, after_clause, all_Op, MathOp, opt_name, opt_unique,
@@ -130,7 +133,7 @@ static Node *makeA_Expr(int oper, char *opname, Node *lexpr, Node *rexpr);
130
133
131
134
%type <list> stmtblock, stmtmulti,
132
135
relation_name_list, OptTableElementList, tableElementList,
133
- OptInherit, OptCheck, CheckList , definition,
136
+ OptInherit, OptConstraint, ConstraintList , definition,
134
137
opt_with, def_args, def_name_list, func_argtypes,
135
138
oper_argtypes, OptStmtList, OptStmtBlock, OptStmtMulti,
136
139
opt_column_list, columnList, opt_va_list, va_list,
@@ -161,7 +164,7 @@ static Node *makeA_Expr(int oper, char *opname, Node *lexpr, Node *rexpr);
161
164
a_expr, a_expr_or_null, AexprConst,
162
165
default_expr, default_expr_or_null,
163
166
in_expr_nodes, not_in_expr_nodes,
164
- having_clause, default_expr
167
+ having_clause
165
168
%type <value> NumConst
166
169
%type <attr> event_object, attr
167
170
%type <sortgroupby> groupby
@@ -188,8 +191,8 @@ static Node *makeA_Expr(int oper, char *opname, Node *lexpr, Node *rexpr);
188
191
%token ABORT_TRANS, ACL, ADD, AFTER, AGGREGATE, ALL, ALTER, ANALYZE,
189
192
AND, APPEND, ARCHIVE, ARCH_STORE, AS, ASC,
190
193
BACKWARD, BEFORE, BEGIN_TRANS, BETWEEN, BINARY, BY,
191
- CAST, CHANGE, CHECK, CLOSE, CLUSTER, COLUMN, COMMIT, COPY, CREATE,
192
- CURRENT, CURSOR, DATABASE, DECLARE, DEFAULT, DELETE,
194
+ CAST, CHANGE, CHECK, CLOSE, CLUSTER, COLUMN, COMMIT, CONSTRAINT,
195
+ COPY, CREATE, CURRENT, CURSOR, DATABASE, DECLARE, DEFAULT, DELETE,
193
196
DELIMITERS, DESC, DISTINCT, DO, DROP, END_TRANS,
194
197
EXTEND, FETCH, FOR, FORWARD, FROM, FUNCTION, GRANT, GROUP,
195
198
HAVING, HEAVY, IN, INDEX, INHERITS, INSERT, INSTEAD, INTO, IS,
@@ -534,14 +537,14 @@ copy_delimiter: USING DELIMITERS Sconst { $$ = $3;}
534
537
*****************************************************************************/
535
538
536
539
CreateStmt: CREATE TABLE relation_name '(' OptTableElementList ')'
537
- OptInherit OptCheck OptArchiveType OptLocation
540
+ OptInherit OptConstraint OptArchiveType OptLocation
538
541
OptArchiveLocation
539
542
{
540
543
CreateStmt *n = makeNode(CreateStmt);
541
544
n->relname = $3;
542
545
n->tableElts = $5;
543
546
n->inhRelnames = $7;
544
- n->check = $8;
547
+ n->constraints = $8;
545
548
n->archiveType = $9;
546
549
n->location = $10;
547
550
n->archiveLoc = $11;
@@ -586,18 +589,28 @@ OptInherit: INHERITS '(' relation_name_list ')' { $$ = $3; }
586
589
| /*EMPTY*/ { $$ = NIL; }
587
590
;
588
591
589
- OptCheck : CheckList { $$ = $1; }
592
+ OptConstraint : ConstraintList { $$ = $1; }
590
593
| { $$ = NULL; }
591
594
;
592
595
593
- CheckList :
594
- CheckList ',' CheckElem
596
+ ConstraintList :
597
+ ConstraintList ',' ConstraintElem
595
598
{ $$ = lappend($1, $3); }
596
- | CheckElem
599
+ | ConstraintElem
597
600
{ $$ = lcons($1, NIL); }
598
601
;
599
602
600
- CheckElem: CHECK a_expr {
603
+ ConstraintElem:
604
+ CONSTRAINT name ConstraintDef
605
+ {
606
+ $3->name = $2;
607
+ $$ = $3;
608
+ }
609
+ | ConstraintDef { $$ = $1; }
610
+ ;
611
+
612
+ ConstraintDef: CHECK a_expr {
613
+ ConstaintDef *constr = palloc (sizeof(ConstaintDef));
601
614
int chklen = CurScanPosition() - CheckStartPosition;
602
615
char *check;
603
616
@@ -606,7 +619,10 @@ CheckElem: CHECK a_expr {
606
619
parseString + CheckStartPosition,
607
620
chklen);
608
621
check[chklen] = 0;
609
- $$ = check;
622
+ constr->type = CONSTR_CHECK;
623
+ constr->name = NULL;
624
+ constr->expr = check;
625
+ $$ = constr;
610
626
}
611
627
;
612
628
0 commit comments