summaryrefslogtreecommitdiff
path: root/contrib/array/array_iterator.c
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/array/array_iterator.c')
-rw-r--r--contrib/array/array_iterator.c372
1 files changed, 0 insertions, 372 deletions
diff --git a/contrib/array/array_iterator.c b/contrib/array/array_iterator.c
deleted file mode 100644
index 8a2455b673b..00000000000
--- a/contrib/array/array_iterator.c
+++ /dev/null
@@ -1,372 +0,0 @@
-/*
- * array_iterator.c --
- *
- * This file defines a new class of operators which take an
- * array and a scalar value, iterate a scalar operator over the
- * elements of the array and the value and compute a result as
- * the logical OR or AND of the iteration results.
- *
- * Copyright (C) 1999, Massimo Dal Zotto <dz@cs.unitn.it>
- * ported to postgreSQL 6.3.2,added oid_functions, 18.1.1999,
- * Tobias Gabele <gabele@wiz.uni-kassel.de>
- *
- * This software is distributed under the GNU General Public License
- * either version 2, or (at your option) any later version.
- */
-
-#include "postgres.h"
-
-#include <ctype.h>
-#include <stdio.h>
-#include <sys/types.h>
-#include <string.h>
-
-#include "access/tupmacs.h"
-#include "access/xact.h"
-#include "fmgr.h"
-#include "miscadmin.h"
-#include "utils/array.h"
-#include "utils/builtins.h"
-#include "utils/memutils.h"
-#include "utils/lsyscache.h"
-
-#include "array_iterator.h"
-
-
-static int32
-array_iterator(Oid elemtype, Oid proc, int and, ArrayType *array, Datum value)
-{
- int16 typlen;
- bool typbyval;
- int nitems,
- i;
- Datum result;
- int ndim,
- *dim;
- char *p;
- FmgrInfo finfo;
-
- /* Sanity checks */
- if (array == (ArrayType *) NULL)
- {
- /* elog(WARNING, "array_iterator: array is null"); */
- return (0);
- }
-
- /* detoast input if necessary */
- array = DatumGetArrayTypeP(PointerGetDatum(array));
-
- ndim = ARR_NDIM(array);
- dim = ARR_DIMS(array);
- nitems = ArrayGetNItems(ndim, dim);
- if (nitems == 0)
- return (0);
-
- /* Lookup element type information */
- get_typlenbyval(elemtype, &typlen, &typbyval);
-
- /* Lookup the function entry point */
- fmgr_info(proc, &finfo);
- if (finfo.fn_nargs != 2)
- {
- elog(ERROR, "array_iterator: proc %u does not take 2 args", proc);
- return (0);
- }
-
- /* Scan the array and apply the operator to each element */
- result = BoolGetDatum(false);
- p = ARR_DATA_PTR(array);
- for (i = 0; i < nitems; i++)
- {
- Datum itemvalue;
-
- itemvalue = fetch_att(p, typbyval, typlen);
-
- if (typlen > 0)
- p += typlen;
- else
- p += INTALIGN(*(int32 *) p);
-
- result = FunctionCall2(&finfo, itemvalue, value);
-
- if (DatumGetBool(result))
- {
- if (!and)
- return (1);
- }
- else
- {
- if (and)
- return (0);
- }
- }
-
- if (and && DatumGetBool(result))
- return (1);
- else
- return (0);
-}
-
-/*
- * Iterator functions for type _text
- */
-
-int32
-array_texteq(ArrayType *array, char *value)
-{
- return array_iterator((Oid) 25, /* text */
- (Oid) 67, /* texteq */
- 0, /* logical or */
- array, (Datum) value);
-}
-
-int32
-array_all_texteq(ArrayType *array, char *value)
-{
- return array_iterator((Oid) 25, /* text */
- (Oid) 67, /* texteq */
- 1, /* logical and */
- array, (Datum) value);
-}
-
-int32
-array_textregexeq(ArrayType *array, char *value)
-{
- return array_iterator((Oid) 25, /* text */
- (Oid) 1254, /* textregexeq */
- 0, /* logical or */
- array, (Datum) value);
-}
-
-int32
-array_all_textregexeq(ArrayType *array, char *value)
-{
- return array_iterator((Oid) 25, /* text */
- (Oid) 1254, /* textregexeq */
- 1, /* logical and */
- array, (Datum) value);
-}
-
-/*
- * Iterator functions for type _varchar. Note that the regexp
- * operators take the second argument of type text.
- */
-
-int32
-array_varchareq(ArrayType *array, char *value)
-{
- return array_iterator((Oid) 1043, /* varchar */
- (Oid) 1070, /* varchareq */
- 0, /* logical or */
- array, (Datum) value);
-}
-
-int32
-array_all_varchareq(ArrayType *array, char *value)
-{
- return array_iterator((Oid) 1043, /* varchar */
- (Oid) 1070, /* varchareq */
- 1, /* logical and */
- array, (Datum) value);
-}
-
-int32
-array_varcharregexeq(ArrayType *array, char *value)
-{
- return array_iterator((Oid) 1043, /* varchar */
- (Oid) 1254, /* textregexeq */
- 0, /* logical or */
- array, (Datum) value);
-}
-
-int32
-array_all_varcharregexeq(ArrayType *array, char *value)
-{
- return array_iterator((Oid) 1043, /* varchar */
- (Oid) 1254, /* textregexeq */
- 1, /* logical and */
- array, (Datum) value);
-}
-
-/*
- * Iterator functions for type _bpchar. Note that the regexp
- * operators take the second argument of type text.
- */
-
-int32
-array_bpchareq(ArrayType *array, char *value)
-{
- return array_iterator((Oid) 1042, /* bpchar */
- (Oid) 1048, /* bpchareq */
- 0, /* logical or */
- array, (Datum) value);
-}
-
-int32
-array_all_bpchareq(ArrayType *array, char *value)
-{
- return array_iterator((Oid) 1042, /* bpchar */
- (Oid) 1048, /* bpchareq */
- 1, /* logical and */
- array, (Datum) value);
-}
-
-int32
-array_bpcharregexeq(ArrayType *array, char *value)
-{
- return array_iterator((Oid) 1042, /* bpchar */
- (Oid) 1254, /* textregexeq */
- 0, /* logical or */
- array, (Datum) value);
-}
-
-int32
-array_all_bpcharregexeq(ArrayType *array, char *value)
-{
- return array_iterator((Oid) 1042, /* bpchar */
- (Oid) 1254, /* textregexeq */
- 1, /* logical and */
- array, (Datum) value);
-}
-
-/*
- * Iterator functions for type _int4
- */
-
-int32
-array_int4eq(ArrayType *array, int4 value)
-{
- return array_iterator((Oid) 23, /* int4 */
- (Oid) 65, /* int4eq */
- 0, /* logical or */
- array, (Datum) value);
-}
-
-int32
-array_all_int4eq(ArrayType *array, int4 value)
-{
- return array_iterator((Oid) 23, /* int4 */
- (Oid) 65, /* int4eq */
- 1, /* logical and */
- array, (Datum) value);
-}
-
-int32
-array_int4ne(ArrayType *array, int4 value)
-{
- return array_iterator((Oid) 23, /* int4 */
- (Oid) 144, /* int4ne */
- 0, /* logical or */
- array, (Datum) value);
-}
-
-int32
-array_all_int4ne(ArrayType *array, int4 value)
-{
- return array_iterator((Oid) 23, /* int4 */
- (Oid) 144, /* int4ne */
- 1, /* logical and */
- array, (Datum) value);
-}
-
-int32
-array_int4gt(ArrayType *array, int4 value)
-{
- return array_iterator((Oid) 23, /* int4 */
- (Oid) 147, /* int4gt */
- 0, /* logical or */
- array, (Datum) value);
-}
-
-int32
-array_all_int4gt(ArrayType *array, int4 value)
-{
- return array_iterator((Oid) 23, /* int4 */
- (Oid) 147, /* int4gt */
- 1, /* logical and */
- array, (Datum) value);
-}
-
-int32
-array_int4ge(ArrayType *array, int4 value)
-{
- return array_iterator((Oid) 23, /* int4 */
- (Oid) 150, /* int4ge */
- 0, /* logical or */
- array, (Datum) value);
-}
-
-int32
-array_all_int4ge(ArrayType *array, int4 value)
-{
- return array_iterator((Oid) 23, /* int4 */
- (Oid) 150, /* int4ge */
- 1, /* logical and */
- array, (Datum) value);
-}
-
-int32
-array_int4lt(ArrayType *array, int4 value)
-{
- return array_iterator((Oid) 23, /* int4 */
- (Oid) 66, /* int4lt */
- 0, /* logical or */
- array, (Datum) value);
-}
-
-int32
-array_all_int4lt(ArrayType *array, int4 value)
-{
- return array_iterator((Oid) 23, /* int4 */
- (Oid) 66, /* int4lt */
- 1, /* logical and */
- array, (Datum) value);
-}
-
-int32
-array_int4le(ArrayType *array, int4 value)
-{
- return array_iterator((Oid) 23, /* int4 */
- (Oid) 149, /* int4le */
- 0, /* logical or */
- array, (Datum) value);
-}
-
-int32
-array_all_int4le(ArrayType *array, int4 value)
-{
- return array_iterator((Oid) 23, /* int4 */
- (Oid) 149, /* int4le */
- 1, /* logical and */
- array, (Datum) value);
-}
-
-/* new tobias gabele 1999 */
-
-int32
-array_oideq(ArrayType *array, Oid value)
-{
- return array_iterator((Oid) 26, /* oid */
- (Oid) 184, /* oideq */
- 0, /* logical or */
- array, (Datum) value);
-}
-
-int32
-array_all_oidne(ArrayType *array, Oid value)
-{
- return array_iterator((Oid) 26, /* int4 */
- (Oid) 185, /* oidne */
- 1, /* logical and */
- array, (Datum) value);
-}
-
-/* end of file */
-
-/*
- * Local Variables:
- * tab-width: 4
- * c-indent-level: 4
- * c-basic-offset: 4
- * End:
- */