|
10 | 10 | *
|
11 | 11 | *
|
12 | 12 | * IDENTIFICATION
|
13 |
| - * $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 1.72 1997/11/25 22:05:29 momjian Exp $ |
| 13 | + * $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 1.73 1997/11/30 23:11:10 thomas Exp $ |
14 | 14 | *
|
15 | 15 | * HISTORY
|
16 | 16 | * AUTHORDATEMAJOR EVENT
|
@@ -566,20 +566,25 @@ default_expr: AexprConst
|
566 | 566 | ;
|
567 | 567 |
|
568 | 568 | opt_constraint: NOT NULL_P{ $$ = TRUE; }
|
| 569 | +| NOT NULL_P UNIQUE |
| 570 | +{ |
| 571 | +elog(NOTICE,"UNIQUE clause ignored; not yet implemented",NULL); |
| 572 | +$$ = TRUE; |
| 573 | +} |
569 | 574 | | NOTNULL{ $$ = TRUE; }
|
570 | 575 | | UNIQUE
|
571 | 576 | {
|
572 |
| -elog(WARN,"CREATE TABLE/UNIQUE not yet implemented",NULL); |
| 577 | +elog(NOTICE,"UNIQUE clause ignored; not yet implemented",NULL); |
573 | 578 | $$ = FALSE;
|
574 | 579 | }
|
575 | 580 | | PRIMARY KEY
|
576 | 581 | {
|
577 |
| -elog(WARN,"CREATE TABLE/PRIMARY KEY not yet implemented",NULL); |
| 582 | +elog(NOTICE,"PRIMARY KEY clause ignored; not yet implemented",NULL); |
578 | 583 | $$ = FALSE;
|
579 | 584 | }
|
580 | 585 | | REFERENCES ColId opt_column_list key_match key_actions
|
581 | 586 | {
|
582 |
| -elog(WARN,"CREATE TABLE/FOREIGN KEY not yet implemented",NULL); |
| 587 | +elog(NOTICE,"FOREIGN KEY clause ignored; not yet implemented",NULL); |
583 | 588 | $$ = FALSE;
|
584 | 589 | }
|
585 | 590 | | /* EMPTY */{ $$ = FALSE; }
|
@@ -728,9 +733,15 @@ ConstraintDef:CHECK constraint_elem
|
728 | 733 | | UNIQUE '(' columnList ')'
|
729 | 734 | {elog(WARN,"CREATE TABLE/UNIQUE not yet implemented",NULL); }
|
730 | 735 | | PRIMARY KEY '(' columnList ')'
|
731 |
| -{elog(WARN,"CREATE TABLE/PRIMARY KEY not yet implemented",NULL); } |
| 736 | +{ |
| 737 | +ConstraintDef *constr = palloc (sizeof(ConstraintDef)); |
| 738 | +constr->type = CONSTR_PRIMARY; |
| 739 | +constr->name = NULL; |
| 740 | +constr->keys = $4; |
| 741 | +$$ = constr; |
| 742 | +} |
732 | 743 | | FOREIGN KEY '(' columnList ')' REFERENCES ColId opt_column_list key_match key_actions
|
733 |
| -{elog(WARN,"CREATE TABLE/FOREIGN KEY not yet implemented",NULL); } |
| 744 | +{elog(NOTICE,"FOREIGN KEY clause ignored; not yet implemented",NULL); } |
734 | 745 | ;
|
735 | 746 |
|
736 | 747 | constraint_elem: AexprConst
|
@@ -2607,14 +2618,21 @@ a_expr: attr opt_indirection
|
2607 | 2618 | {$$ = makeA_Expr(OP, ";", NULL, $2); }
|
2608 | 2619 | | '|' a_expr
|
2609 | 2620 | {$$ = makeA_Expr(OP, "|", NULL, $2); }
|
2610 |
| -|AexprConst TYPECAST Typename |
| 2621 | +|a_expr TYPECAST Typename |
2611 | 2622 | {
|
| 2623 | +$$ = (Node *)$1; |
2612 | 2624 | /* AexprConst can be either A_Const or ParamNo */
|
2613 |
| -if (nodeTag($1) == T_A_Const) |
| 2625 | +if (nodeTag($1) == T_A_Const) { |
2614 | 2626 | ((A_Const *)$1)->typename = $3;
|
2615 |
| -else |
| 2627 | +}else if (nodeTag($1) == T_Param) { |
2616 | 2628 | ((ParamNo *)$1)->typename = $3;
|
2617 |
| -$$ = (Node *)$1; |
| 2629 | +/* otherwise, try to transform to a function call */ |
| 2630 | +} else { |
| 2631 | +FuncCall *n = makeNode(FuncCall); |
| 2632 | +n->funcname = $3->name; |
| 2633 | +n->args = lcons($1,NIL); |
| 2634 | +$$ = (Node *)n; |
| 2635 | +} |
2618 | 2636 | }
|
2619 | 2637 | | CAST a_expr AS Typename
|
2620 | 2638 | {
|
@@ -2950,14 +2968,21 @@ position_expr: attr opt_indirection
|
2950 | 2968 | {$$ = makeA_Expr(OP, "*", $1, $3); }
|
2951 | 2969 | | '|' position_expr
|
2952 | 2970 | {$$ = makeA_Expr(OP, "|", NULL, $2); }
|
2953 |
| -|AexprConst TYPECAST Typename |
| 2971 | +|position_expr TYPECAST Typename |
2954 | 2972 | {
|
| 2973 | +$$ = (Node *)$1; |
2955 | 2974 | /* AexprConst can be either A_Const or ParamNo */
|
2956 |
| -if (nodeTag($1) == T_A_Const) |
| 2975 | +if (nodeTag($1) == T_A_Const) { |
2957 | 2976 | ((A_Const *)$1)->typename = $3;
|
2958 |
| -else |
| 2977 | +}else if (nodeTag($1) == T_Param) { |
2959 | 2978 | ((ParamNo *)$1)->typename = $3;
|
2960 |
| -$$ = (Node *)$1; |
| 2979 | +/* otherwise, try to transform to a function call */ |
| 2980 | +} else { |
| 2981 | +FuncCall *n = makeNode(FuncCall); |
| 2982 | +n->funcname = $3->name; |
| 2983 | +n->args = lcons($1,NIL); |
| 2984 | +$$ = (Node *)n; |
| 2985 | +} |
2961 | 2986 | }
|
2962 | 2987 | | CAST position_expr AS Typename
|
2963 | 2988 | {
|
|