mirror of
https://github.com/postgres/postgres.git
synced 2025-04-27 22:56:53 +03:00
Make array_cat more paranoid about checking datatypes in empty arrays.
This commit is contained in:
parent
bd3bc4076e
commit
d0a6042f9f
@ -6,7 +6,7 @@
|
|||||||
* Copyright (c) 2003, PostgreSQL Global Development Group
|
* Copyright (c) 2003, PostgreSQL Global Development Group
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* 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);
|
v1 = PG_GETARG_ARRAYTYPE_P(0);
|
||||||
v2 = PG_GETARG_ARRAYTYPE_P(1);
|
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:
|
* We must have one of the following combinations of inputs:
|
||||||
* 1) one empty array, and one non-empty array
|
* 1) one empty array, and one non-empty array
|
||||||
@ -200,22 +216,6 @@ array_cat(PG_FUNCTION_ARGS)
|
|||||||
"compatible for concatenation.",
|
"compatible for concatenation.",
|
||||||
ndims1, ndims2)));
|
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 */
|
/* get argument array details */
|
||||||
lbs1 = ARR_LBOUND(v1);
|
lbs1 = ARR_LBOUND(v1);
|
||||||
lbs2 = ARR_LBOUND(v2);
|
lbs2 = ARR_LBOUND(v2);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user