diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2002-08-31 22:10:48 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2002-08-31 22:10:48 +0000 |
commit | 845a6c3acccea0ec34e70808787aa7d431b0d96d (patch) | |
tree | c6e162146378dc6cdb62793d3b30674b6d64d465 /src/backend/parser/parse_expr.c | |
parent | 1440acd703e04f39340f7fb3a432b028a791e038 (diff) | |
download | postgresql-845a6c3acccea0ec34e70808787aa7d431b0d96d.tar.gz postgresql-845a6c3acccea0ec34e70808787aa7d431b0d96d.zip |
Code review for domain-constraints patch. Use a new ConstraintTest node
type for runtime constraint checks, instead of misusing the parse-time
Constraint node for the purpose. Fix some damage introduced into type
coercion logic; in particular ensure that a coerced expression tree will
read out the correct result type when inspected (patch had broken some
RelabelType cases). Enforce domain NOT NULL constraints against columns
that are omitted from an INSERT.
Diffstat (limited to 'src/backend/parser/parse_expr.c')
-rw-r--r-- | src/backend/parser/parse_expr.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/src/backend/parser/parse_expr.c b/src/backend/parser/parse_expr.c index 1a7acd22527..de07d39b4d0 100644 --- a/src/backend/parser/parse_expr.c +++ b/src/backend/parser/parse_expr.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/parser/parse_expr.c,v 1.126 2002/08/26 17:53:58 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/parser/parse_expr.c,v 1.127 2002/08/31 22:10:46 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -640,6 +640,7 @@ transformExpr(ParseState *pstate, Node *expr) case T_ArrayRef: case T_FieldSelect: case T_RelabelType: + case T_ConstraintTest: { result = (Node *) expr; break; @@ -919,15 +920,15 @@ exprType(Node *expr) case T_CaseWhen: type = exprType(((CaseWhen *) expr)->result); break; - case T_Constraint: - type = exprType(((Constraint *) expr)->raw_expr); - break; case T_NullTest: type = BOOLOID; break; case T_BooleanTest: type = BOOLOID; break; + case T_ConstraintTest: + type = exprType(((ConstraintTest *) expr)->arg); + break; default: elog(ERROR, "exprType: Do not know how to get type for %d node", nodeTag(expr)); @@ -978,10 +979,8 @@ exprTypmod(Node *expr) break; case T_FieldSelect: return ((FieldSelect *) expr)->resulttypmod; - break; case T_RelabelType: return ((RelabelType *) expr)->resulttypmod; - break; case T_CaseExpr: { /* @@ -1013,6 +1012,9 @@ exprTypmod(Node *expr) return typmod; } break; + case T_ConstraintTest: + return exprTypmod(((ConstraintTest *) expr)->arg); + default: break; } |