aboutsummaryrefslogtreecommitdiff
path: root/src/include/utils/array.h
diff options
context:
space:
mode:
authorBruce Momjian <bruce@momjian.us>2003-06-24 23:14:49 +0000
committerBruce Momjian <bruce@momjian.us>2003-06-24 23:14:49 +0000
commit46bf65148002f03a4775e6fbb2c4f758184062c5 (patch)
tree35508e7d4793489135efdbdff9b0fd2325c3b3e3 /src/include/utils/array.h
parent50e53236aff06a6193059b5a92e60561645338ab (diff)
downloadpostgresql-46bf65148002f03a4775e6fbb2c4f758184062c5.tar.gz
postgresql-46bf65148002f03a4775e6fbb2c4f758184062c5.zip
Array mega-patch.
Joe Conway
Diffstat (limited to 'src/include/utils/array.h')
-rw-r--r--src/include/utils/array.h55
1 files changed, 48 insertions, 7 deletions
diff --git a/src/include/utils/array.h b/src/include/utils/array.h
index 23a1d2b30e0..5df86b1827f 100644
--- a/src/include/utils/array.h
+++ b/src/include/utils/array.h
@@ -10,7 +10,7 @@
* Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $Id: array.h,v 1.38 2003/05/08 22:19:57 tgl Exp $
+ * $Id: array.h,v 1.39 2003/06/24 23:14:49 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -32,6 +32,37 @@ typedef struct
Oid elemtype; /* element type OID */
} ArrayType;
+typedef struct ArrayBuildState
+{
+ MemoryContext mcontext; /* where all the temp stuff is kept */
+ Datum *dvalues; /* array of accumulated Datums */
+ /*
+ * The allocated size of dvalues[] is always a multiple of
+ * ARRAY_ELEMS_CHUNKSIZE
+ */
+#define ARRAY_ELEMS_CHUNKSIZE 64
+ int nelems; /* number of valid Datums in dvalues[] */
+ Oid element_type; /* data type of the Datums */
+ int16 typlen; /* needed info about datatype */
+ bool typbyval;
+ char typalign;
+} ArrayBuildState;
+
+/*
+ * structure to cache type metadata needed for array manipulation
+ */
+typedef struct ArrayMetaState
+{
+ Oid element_type;
+ int typlen;
+ bool typbyval;
+ char typdelim;
+ Oid typelem;
+ Oid typiofunc;
+ char typalign;
+ FmgrInfo proc;
+} ArrayMetaState;
+
/*
* fmgr macros for array objects
*/
@@ -86,11 +117,15 @@ extern Datum array_recv(PG_FUNCTION_ARGS);
extern Datum array_send(PG_FUNCTION_ARGS);
extern Datum array_length_coerce(PG_FUNCTION_ARGS);
extern Datum array_eq(PG_FUNCTION_ARGS);
+extern Datum array_ne(PG_FUNCTION_ARGS);
+extern Datum array_lt(PG_FUNCTION_ARGS);
+extern Datum array_gt(PG_FUNCTION_ARGS);
+extern Datum array_le(PG_FUNCTION_ARGS);
+extern Datum array_ge(PG_FUNCTION_ARGS);
+extern Datum btarraycmp(PG_FUNCTION_ARGS);
extern Datum array_dims(PG_FUNCTION_ARGS);
extern Datum array_lower(PG_FUNCTION_ARGS);
extern Datum array_upper(PG_FUNCTION_ARGS);
-extern Datum array_assign(PG_FUNCTION_ARGS);
-extern Datum array_subscript(PG_FUNCTION_ARGS);
extern Datum array_type_coerce(PG_FUNCTION_ARGS);
extern Datum array_ref(ArrayType *array, int nSubscripts, int *indx,
@@ -124,7 +159,14 @@ extern void deconstruct_array(ArrayType *array,
Oid elmtype,
int elmlen, bool elmbyval, char elmalign,
Datum **elemsp, int *nelemsp);
-
+extern ArrayBuildState *accumArrayResult(ArrayBuildState *astate,
+ Datum dvalue, bool disnull,
+ Oid element_type,
+ MemoryContext rcontext);
+extern Datum makeArrayResult(ArrayBuildState *astate,
+ MemoryContext rcontext);
+extern Datum makeMdArrayResult(ArrayBuildState *astate, int ndims,
+ int *dims, int *lbs, MemoryContext rcontext);
/*
* prototypes for functions defined in arrayutils.c
@@ -141,12 +183,11 @@ extern int mda_next_tuple(int n, int *curr, int *span);
/*
* prototypes for functions defined in array_userfuncs.c
*/
-extern Datum singleton_array(PG_FUNCTION_ARGS);
extern Datum array_push(PG_FUNCTION_ARGS);
-extern Datum array_accum(PG_FUNCTION_ARGS);
extern Datum array_cat(PG_FUNCTION_ARGS);
-extern ArrayType *create_singleton_array(Oid element_type,
+extern ArrayType *create_singleton_array(FunctionCallInfo fcinfo,
+ Oid element_type,
Datum element,
int ndims);