ADD array_ndims function
Author: Robert Haas <robertmhaas@gmail.com>
This commit is contained in:
parent
9beb9e761b
commit
254aecb704
|
@ -1,4 +1,4 @@
|
||||||
<!-- $PostgreSQL: pgsql/doc/src/sgml/func.sgml,v 1.454 2008/11/04 00:59:45 momjian Exp $ -->
|
<!-- $PostgreSQL: pgsql/doc/src/sgml/func.sgml,v 1.455 2008/11/04 14:49:11 petere Exp $ -->
|
||||||
|
|
||||||
<chapter id="functions">
|
<chapter id="functions">
|
||||||
<title>Functions and Operators</title>
|
<title>Functions and Operators</title>
|
||||||
|
@ -9373,6 +9373,17 @@ SELECT NULLIF(value, '(none)') ...
|
||||||
<entry><literal>array_cat(ARRAY[1,2,3], ARRAY[4,5])</literal></entry>
|
<entry><literal>array_cat(ARRAY[1,2,3], ARRAY[4,5])</literal></entry>
|
||||||
<entry><literal>{1,2,3,4,5}</literal></entry>
|
<entry><literal>{1,2,3,4,5}</literal></entry>
|
||||||
</row>
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>
|
||||||
|
<literal>
|
||||||
|
<function>array_ndims</function>(<type>anyarray</type>)
|
||||||
|
</literal>
|
||||||
|
</entry>
|
||||||
|
<entry><type>int</type></entry>
|
||||||
|
<entry>returns the number of dimensions of the array</entry>
|
||||||
|
<entry><literal>array_ndims(ARRAY[[1,2,3], [4,5,6]])</literal></entry>
|
||||||
|
<entry><literal>2</literal></entry>
|
||||||
|
</row>
|
||||||
<row>
|
<row>
|
||||||
<entry>
|
<entry>
|
||||||
<literal>
|
<literal>
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $PostgreSQL: pgsql/src/backend/utils/adt/arrayfuncs.c,v 1.147 2008/07/21 04:47:00 tgl Exp $
|
* $PostgreSQL: pgsql/src/backend/utils/adt/arrayfuncs.c,v 1.148 2008/11/04 14:49:11 petere Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
@ -1530,6 +1530,22 @@ array_send(PG_FUNCTION_ARGS)
|
||||||
PG_RETURN_BYTEA_P(pq_endtypsend(&buf));
|
PG_RETURN_BYTEA_P(pq_endtypsend(&buf));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* array_ndims :
|
||||||
|
* returns the number of dimensions of the array pointed to by "v"
|
||||||
|
*/
|
||||||
|
Datum
|
||||||
|
array_ndims(PG_FUNCTION_ARGS)
|
||||||
|
{
|
||||||
|
ArrayType *v = PG_GETARG_ARRAYTYPE_P(0);
|
||||||
|
|
||||||
|
/* Sanity check: does it look like an array at all? */
|
||||||
|
if (ARR_NDIM(v) <= 0 || ARR_NDIM(v) > MAXDIM)
|
||||||
|
PG_RETURN_NULL();
|
||||||
|
|
||||||
|
PG_RETURN_INT32(ARR_NDIM(v));
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* array_dims :
|
* array_dims :
|
||||||
* returns the dimensions of the array pointed to by "v", as a "text"
|
* returns the dimensions of the array pointed to by "v", as a "text"
|
||||||
|
|
|
@ -37,7 +37,7 @@
|
||||||
* Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group
|
* Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group
|
||||||
* Portions Copyright (c) 1994, Regents of the University of California
|
* Portions Copyright (c) 1994, Regents of the University of California
|
||||||
*
|
*
|
||||||
* $PostgreSQL: pgsql/src/include/catalog/catversion.h,v 1.501 2008/11/03 17:51:13 tgl Exp $
|
* $PostgreSQL: pgsql/src/include/catalog/catversion.h,v 1.502 2008/11/04 14:49:11 petere Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
@ -53,6 +53,6 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* yyyymmddN */
|
/* yyyymmddN */
|
||||||
#define CATALOG_VERSION_NO 200811031
|
#define CATALOG_VERSION_NO 200811041
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
* Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group
|
* Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group
|
||||||
* Portions Copyright (c) 1994, Regents of the University of California
|
* Portions Copyright (c) 1994, Regents of the University of California
|
||||||
*
|
*
|
||||||
* $PostgreSQL: pgsql/src/include/catalog/pg_proc.h,v 1.523 2008/11/03 21:09:17 tgl Exp $
|
* $PostgreSQL: pgsql/src/include/catalog/pg_proc.h,v 1.524 2008/11/04 14:49:11 petere Exp $
|
||||||
*
|
*
|
||||||
* NOTES
|
* NOTES
|
||||||
* The script catalog/genbki.sh reads this file and generates .bki
|
* The script catalog/genbki.sh reads this file and generates .bki
|
||||||
|
@ -985,6 +985,7 @@ DATA(insert OID = 393 ( array_le PGNSP PGUID 12 1 0 0 f f t f i 2 16 "2277
|
||||||
DESCR("array less than or equal");
|
DESCR("array less than or equal");
|
||||||
DATA(insert OID = 396 ( array_ge PGNSP PGUID 12 1 0 0 f f t f i 2 16 "2277 2277" _null_ _null_ _null_ array_ge _null_ _null_ _null_ ));
|
DATA(insert OID = 396 ( array_ge PGNSP PGUID 12 1 0 0 f f t f i 2 16 "2277 2277" _null_ _null_ _null_ array_ge _null_ _null_ _null_ ));
|
||||||
DESCR("array greater than or equal");
|
DESCR("array greater than or equal");
|
||||||
|
DATA(insert OID = 748 ( array_ndims PGNSP PGUID 12 1 0 0 f f t f i 1 23 "2277" _null_ _null_ _null_ array_ndims _null_ _null_ _null_ ));
|
||||||
DATA(insert OID = 747 ( array_dims PGNSP PGUID 12 1 0 0 f f t f i 1 25 "2277" _null_ _null_ _null_ array_dims _null_ _null_ _null_ ));
|
DATA(insert OID = 747 ( array_dims PGNSP PGUID 12 1 0 0 f f t f i 1 25 "2277" _null_ _null_ _null_ array_dims _null_ _null_ _null_ ));
|
||||||
DESCR("array dimensions");
|
DESCR("array dimensions");
|
||||||
DATA(insert OID = 750 ( array_in PGNSP PGUID 12 1 0 0 f f t f s 3 2277 "2275 26 23" _null_ _null_ _null_ array_in _null_ _null_ _null_ ));
|
DATA(insert OID = 750 ( array_in PGNSP PGUID 12 1 0 0 f f t f s 3 2277 "2275 26 23" _null_ _null_ _null_ array_in _null_ _null_ _null_ ));
|
||||||
|
|
|
@ -49,7 +49,7 @@
|
||||||
* Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group
|
* Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group
|
||||||
* Portions Copyright (c) 1994, Regents of the University of California
|
* Portions Copyright (c) 1994, Regents of the University of California
|
||||||
*
|
*
|
||||||
* $PostgreSQL: pgsql/src/include/utils/array.h,v 1.68 2008/07/16 00:48:54 momjian Exp $
|
* $PostgreSQL: pgsql/src/include/utils/array.h,v 1.69 2008/11/04 14:49:12 petere Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
@ -195,6 +195,7 @@ extern Datum btarraycmp(PG_FUNCTION_ARGS);
|
||||||
extern Datum arrayoverlap(PG_FUNCTION_ARGS);
|
extern Datum arrayoverlap(PG_FUNCTION_ARGS);
|
||||||
extern Datum arraycontains(PG_FUNCTION_ARGS);
|
extern Datum arraycontains(PG_FUNCTION_ARGS);
|
||||||
extern Datum arraycontained(PG_FUNCTION_ARGS);
|
extern Datum arraycontained(PG_FUNCTION_ARGS);
|
||||||
|
extern Datum array_ndims(PG_FUNCTION_ARGS);
|
||||||
extern Datum array_dims(PG_FUNCTION_ARGS);
|
extern Datum array_dims(PG_FUNCTION_ARGS);
|
||||||
extern Datum array_lower(PG_FUNCTION_ARGS);
|
extern Datum array_lower(PG_FUNCTION_ARGS);
|
||||||
extern Datum array_upper(PG_FUNCTION_ARGS);
|
extern Datum array_upper(PG_FUNCTION_ARGS);
|
||||||
|
|
|
@ -68,6 +68,15 @@ SELECT a[1:3],
|
||||||
{} | {} | {foo,bar} | {}
|
{} | {} | {foo,bar} | {}
|
||||||
(3 rows)
|
(3 rows)
|
||||||
|
|
||||||
|
SELECT array_ndims(a) AS a,array_ndims(b) AS b,array_ndims(c) AS c
|
||||||
|
FROM arrtest;
|
||||||
|
a | b | c
|
||||||
|
---+---+---
|
||||||
|
1 | 3 |
|
||||||
|
1 | 2 | 1
|
||||||
|
| 1 | 1
|
||||||
|
(3 rows)
|
||||||
|
|
||||||
SELECT array_dims(a) AS a,array_dims(b) AS b,array_dims(c) AS c
|
SELECT array_dims(a) AS a,array_dims(b) AS b,array_dims(c) AS c
|
||||||
FROM arrtest;
|
FROM arrtest;
|
||||||
a | b | c
|
a | b | c
|
||||||
|
|
|
@ -53,6 +53,9 @@ SELECT a[1:3],
|
||||||
d[1:1][1:2]
|
d[1:1][1:2]
|
||||||
FROM arrtest;
|
FROM arrtest;
|
||||||
|
|
||||||
|
SELECT array_ndims(a) AS a,array_ndims(b) AS b,array_ndims(c) AS c
|
||||||
|
FROM arrtest;
|
||||||
|
|
||||||
SELECT array_dims(a) AS a,array_dims(b) AS b,array_dims(c) AS c
|
SELECT array_dims(a) AS a,array_dims(b) AS b,array_dims(c) AS c
|
||||||
FROM arrtest;
|
FROM arrtest;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue