When we added the ability to have zero-element ARRAY[] constructs by adding an

explicit cast to show the intended array type, we forgot to teach ruleutils.c
to print out such constructs properly.  Found by noting bogus output from
recent changes in polymorphism regression test.
This commit is contained in:
Tom Lane 2008-12-19 05:04:35 +00:00
parent e32014d85d
commit adac22bf8a
2 changed files with 13 additions and 5 deletions

View File

@ -9,7 +9,7 @@
*
*
* IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/utils/adt/ruleutils.c,v 1.289 2008/12/18 18:20:34 tgl Exp $
* $PostgreSQL: pgsql/src/backend/utils/adt/ruleutils.c,v 1.290 2008/12/19 05:04:35 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@ -4451,6 +4451,14 @@ get_rule_expr(Node *node, deparse_context *context,
appendStringInfo(buf, "ARRAY[");
get_rule_expr((Node *) arrayexpr->elements, context, true);
appendStringInfoChar(buf, ']');
/*
* If the array isn't empty, we assume its elements are
* coerced to the desired type. If it's empty, though, we
* need an explicit coercion to the array type.
*/
if (arrayexpr->elements == NIL)
appendStringInfo(buf, "::%s",
format_type_with_typemod(arrayexpr->array_typeid, -1));
}
break;

View File

@ -1007,8 +1007,8 @@ HINT: Use DROP FUNCTION first.
\df dfunc
List of functions
Schema | Name | Result data type | Argument data types
--------+-------+------------------+--------------------------------------
public | dfunc | integer | VARIADIC a integer[] DEFAULT ARRAY[]
--------+-------+------------------+-------------------------------------------------
public | dfunc | integer | VARIADIC a integer[] DEFAULT ARRAY[]::integer[]
(1 row)
drop function dfunc(a variadic int[]);