*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/parser/parse_expr.c,v 1.249 2009/11/13 16:09:10 heikki Exp $
+ * $PostgreSQL: pgsql/src/backend/parser/parse_expr.c,v 1.250 2009/11/13 19:48:20 heikki Exp $
*
*-------------------------------------------------------------------------
*/
elementType = get_element_type(targetType);
if (OidIsValid(elementType))
{
- result = transformArrayExpr(pstate,
- (A_ArrayExpr *) tc->arg,
- 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)
+ * tranformArrayExpr doesn't know how to check domain
+ * constraints, so ask it to return the base type
+ * instead. transformTypeCast below will cast it to
+ * the domain. In the usual case that the target is
+ * not a domain, transformTypeCast is a no-op.
*/
- result = coerce_to_domain(result,
- InvalidOid,
- -1,
- targetType,
- COERCE_IMPLICIT_CAST,
- tc->location,
- false,
- true);
- break;
+ targetType = getBaseTypeAndTypmod(targetType,
+ &targetTypmod);
+
+ tc = copyObject(tc);
+ tc->arg = transformArrayExpr(pstate,
+ (A_ArrayExpr *) tc->arg,
+ targetType,
+ elementType,
+ targetTypmod);
}
-
- /*
- * Corner case: ARRAY[] cast to a non-array type. Fall
- * through to do it the standard way.
- */
}
result = transformTypeCast(pstate, tc);
case T_ArrayCoerceExpr:
case T_ConvertRowtypeExpr:
case T_CaseTestExpr:
+ case T_ArrayExpr:
case T_CoerceToDomain:
case T_CoerceToDomainValue:
case T_SetToDefault: