From 01f7808b3eafcae1f6077f2f61e13b4c132ccd47 Mon Sep 17 00:00:00 2001 From: Robert Haas Date: Tue, 21 Jan 2014 12:38:53 -0500 Subject: Add a cardinality function for arrays. Unlike our other array functions, this considers the total number of elements across all dimensions, and returns 0 rather than NULL when the array has no elements. But it seems that both of those behaviors are almost universally disliked, so hopefully that's OK. Marko Tiikkaja, reviewed by Dean Rasheed and Pavel Stehule --- src/backend/utils/adt/arrayfuncs.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'src/backend/utils/adt/arrayfuncs.c') diff --git a/src/backend/utils/adt/arrayfuncs.c b/src/backend/utils/adt/arrayfuncs.c index d52101663a1..311d0c22f06 100644 --- a/src/backend/utils/adt/arrayfuncs.c +++ b/src/backend/utils/adt/arrayfuncs.c @@ -1739,6 +1739,18 @@ array_length(PG_FUNCTION_ARGS) PG_RETURN_INT32(result); } +/* + * array_cardinality: + * returns the total number of elements in an array + */ +Datum +array_cardinality(PG_FUNCTION_ARGS) +{ + ArrayType *v = PG_GETARG_ARRAYTYPE_P(0); + PG_RETURN_INT32(ArrayGetNItems(ARR_NDIM(v), ARR_DIMS(v))); +} + + /* * array_ref : * This routine takes an array pointer and a subscript array and returns -- cgit v1.2.3