Make array_cat more paranoid about checking datatypes in empty arrays.
authorTom Lane
Fri, 17 Dec 2004 20:59:58 +0000 (20:59 +0000)
committerTom Lane
Fri, 17 Dec 2004 20:59:58 +0000 (20:59 +0000)
src/backend/utils/adt/array_userfuncs.c

index 00146b2403ec364334fb11999df38f601ec0e43a..9f2f34c3edd4ede5e816d60a5bd6235888f5d8ed 100644 (file)
@@ -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);