When we added the ability to have zero-element ARRAY[] constructs by adding an
authorTom Lane
Fri, 19 Dec 2008 05:04:35 +0000 (05:04 +0000)
committerTom Lane
Fri, 19 Dec 2008 05:04:35 +0000 (05:04 +0000)
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.

src/backend/utils/adt/ruleutils.c
src/test/regress/expected/polymorphism.out

index 5a6540b88ea154a78fcdf3b56f24bc73e25c70eb..444ee7a2007d9a6cdbf714470bbf71651647d758 100644 (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;
 
index 6fafc0343cc2cb32a1f916b1d511bf4cae10d773..aace99cb62554bee87ccecc95c414974c0c32749 100644 (file)
@@ -1005,10 +1005,10 @@ $$ select array_upper($1, 1) $$ language sql;
 ERROR:  cannot remove parameter defaults from existing function
 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[]
+                                  List of functions
+ Schema | Name  | Result data type |               Argument data types               
+--------+-------+------------------+-------------------------------------------------
+ public | dfunc | integer          | VARIADIC a integer[] DEFAULT ARRAY[]::integer[]
 (1 row)
 
 drop function dfunc(a variadic int[]);