summaryrefslogtreecommitdiff
path: root/src/backend/utils/adt
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2007-06-06 23:00:50 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2007-06-06 23:00:50 +0000
commit2d4db3675fa7a2f4831b755bc98242421901042f (patch)
tree5961b42325091b789d0f82073812de57323fa4b1 /src/backend/utils/adt
parent7dab4f75ca60f1c04ed9e7ff9d4ca8d71e572b29 (diff)
downloadpostgresql-2d4db3675fa7a2f4831b755bc98242421901042f.tar.gz
Fix up text concatenation so that it accepts all the reasonable cases that
were accepted by prior Postgres releases. This takes care of the loose end left by the preceding patch to downgrade implicit casts-to-text. To avoid breaking desirable behavior for array concatenation, introduce a new polymorphic pseudo-type "anynonarray" --- the added concatenation operators are actually text || anynonarray and anynonarray || text.
Diffstat (limited to 'src/backend/utils/adt')
-rw-r--r--src/backend/utils/adt/pseudotypes.c28
-rw-r--r--src/backend/utils/adt/xml.c4
2 files changed, 29 insertions, 3 deletions
diff --git a/src/backend/utils/adt/pseudotypes.c b/src/backend/utils/adt/pseudotypes.c
index fc9f332482..248bcfa305 100644
--- a/src/backend/utils/adt/pseudotypes.c
+++ b/src/backend/utils/adt/pseudotypes.c
@@ -16,7 +16,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/utils/adt/pseudotypes.c,v 1.19 2007/04/02 03:49:39 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/utils/adt/pseudotypes.c,v 1.20 2007/06/06 23:00:39 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -348,6 +348,32 @@ anyelement_out(PG_FUNCTION_ARGS)
}
/*
+ * anynonarray_in - input routine for pseudo-type ANYNONARRAY.
+ */
+Datum
+anynonarray_in(PG_FUNCTION_ARGS)
+{
+ ereport(ERROR,
+ (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
+ errmsg("cannot accept a value of type anynonarray")));
+
+ PG_RETURN_VOID(); /* keep compiler quiet */
+}
+
+/*
+ * anynonarray_out - output routine for pseudo-type ANYNONARRAY.
+ */
+Datum
+anynonarray_out(PG_FUNCTION_ARGS)
+{
+ ereport(ERROR,
+ (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
+ errmsg("cannot display a value of type anynonarray")));
+
+ PG_RETURN_VOID(); /* keep compiler quiet */
+}
+
+/*
* shell_in - input routine for "shell" types (those not yet filled in).
*/
Datum
diff --git a/src/backend/utils/adt/xml.c b/src/backend/utils/adt/xml.c
index f9fd48db66..2e84fac1d7 100644
--- a/src/backend/utils/adt/xml.c
+++ b/src/backend/utils/adt/xml.c
@@ -7,7 +7,7 @@
* Portions Copyright (c) 1996-2007, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $PostgreSQL: pgsql/src/backend/utils/adt/xml.c,v 1.43 2007/05/21 17:10:29 petere Exp $
+ * $PostgreSQL: pgsql/src/backend/utils/adt/xml.c,v 1.44 2007/06/06 23:00:39 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -1481,7 +1481,7 @@ map_sql_value_to_xml_value(Datum value, Oid type)
initStringInfo(&buf);
- if (is_array_type(type))
+ if (type_is_array(type))
{
int i;
ArrayType *array;