From d0a6042f9ff93c4d485c4fb6afd9f4f4a41f7a85 Mon Sep 17 00:00:00 2001
From: Tom Lane <tgl@sss.pgh.pa.us>
Date: Fri, 17 Dec 2004 20:59:58 +0000
Subject: [PATCH] Make array_cat more paranoid about checking datatypes in
 empty arrays.

---
 src/backend/utils/adt/array_userfuncs.c | 34 ++++++++++++-------------
 1 file changed, 17 insertions(+), 17 deletions(-)

diff --git a/src/backend/utils/adt/array_userfuncs.c b/src/backend/utils/adt/array_userfuncs.c
index 00146b2403e..9f2f34c3edd 100644
--- a/src/backend/utils/adt/array_userfuncs.c
+++ b/src/backend/utils/adt/array_userfuncs.c
@@ -6,7 +6,7 @@
  * Copyright (c) 2003, PostgreSQL Global Development Group
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/utils/adt/array_userfuncs.c,v 1.13 2004/08/29 05:06:49 momjian Exp $
+ *	  $PostgreSQL: pgsql/src/backend/utils/adt/array_userfuncs.c,v 1.14 2004/12/17 20:59:58 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -165,6 +165,22 @@ array_cat(PG_FUNCTION_ARGS)
 	v1 = PG_GETARG_ARRAYTYPE_P(0);
 	v2 = PG_GETARG_ARRAYTYPE_P(1);
 
+	element_type1 = ARR_ELEMTYPE(v1);
+	element_type2 = ARR_ELEMTYPE(v2);
+
+	/* Check we have matching element types */
+	if (element_type1 != element_type2)
+		ereport(ERROR,
+				(errcode(ERRCODE_DATATYPE_MISMATCH),
+				 errmsg("cannot concatenate incompatible arrays"),
+				 errdetail("Arrays with element types %s and %s are not "
+						   "compatible for concatenation.",
+						   format_type_be(element_type1),
+						   format_type_be(element_type2))));
+
+	/* OK, use it */
+	element_type = element_type1;
+
 	/*----------
 	 * We must have one of the following combinations of inputs:
 	 * 1) one empty array, and one non-empty array
@@ -200,22 +216,6 @@ array_cat(PG_FUNCTION_ARGS)
 						   "compatible for concatenation.",
 						   ndims1, ndims2)));
 
-	element_type1 = ARR_ELEMTYPE(v1);
-	element_type2 = ARR_ELEMTYPE(v2);
-
-	/* Check we have matching element types */
-	if (element_type1 != element_type2)
-		ereport(ERROR,
-				(errcode(ERRCODE_DATATYPE_MISMATCH),
-				 errmsg("cannot concatenate incompatible arrays"),
-				 errdetail("Arrays with element types %s and %s are not "
-						   "compatible for concatenation.",
-						   format_type_be(element_type1),
-						   format_type_be(element_type2))));
-
-	/* OK, use it */
-	element_type = element_type1;
-
 	/* get argument array details */
 	lbs1 = ARR_LBOUND(v1);
 	lbs2 = ARR_LBOUND(v2);
-- 
GitLab