When you do "ARRAY[...]::domain", where domain is a domain over an array type,
we need to check domain constraints. We used to do it correctly, but 8.4 introduced a separate code path for the "ARRAY[]::arraytype" case to infer the type of an empty ARRAY construct from the cast target, and forgot to take domains into account. Per report from Florian G. Pflug.
This commit is contained in:
parent
66ad0b3a05
commit
959af88533
@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/parser/parse_expr.c,v 1.241.2.2 2009/10/27 17:11:30 tgl Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/parser/parse_expr.c,v 1.241.2.3 2009/11/13 16:09:20 heikki Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -169,6 +169,20 @@ transformExpr(ParseState *pstate, Node *expr)
|
||||
targetType,
|
||||
elementType,
|
||||
targetTypmod);
|
||||
|
||||
/*
|
||||
* If the target array type is a domain, we still need
|
||||
* to check the domain constraint. (coerce_to_domain
|
||||
* is a no-op if targetType is not a domain)
|
||||
*/
|
||||
result = coerce_to_domain(result,
|
||||
InvalidOid,
|
||||
-1,
|
||||
targetType,
|
||||
COERCE_IMPLICIT_CAST,
|
||||
tc->location,
|
||||
false,
|
||||
true);
|
||||
break;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user