diff options
author | Marc G. Fournier | 1998-08-30 19:37:51 +0000 |
---|---|---|
committer | Marc G. Fournier | 1998-08-30 19:37:51 +0000 |
commit | eec4c7366f04aa258bb8b7fcd2bbc90eda1cc271 (patch) | |
tree | dfb6b70845221063cc0515177b993713595ff69c /contrib/array | |
parent | 3067ac8e77369c1b41195b4d90e2ff2c0b23bc7f (diff) |
From: Massimo Dal Zotto <dz@cs.unitn.it>
Here is a tar file the new directories, which substitute the old ones
in contrib. Please remove the old directories array, datetime, miscutil,
string and userlock before unpacking the tar file in contrib.
Note that as the modules are now installed in lib/modules I install all
my sql code in lib/sql. In my opinion also the other contributors should
follow these rules.
Diffstat (limited to 'contrib/array')
-rw-r--r-- | contrib/array/Makefile | 35 | ||||
-rw-r--r-- | contrib/array/array_iterator.c | 70 | ||||
-rw-r--r-- | contrib/array/array_iterator.sql.in | 55 |
3 files changed, 48 insertions, 112 deletions
diff --git a/contrib/array/Makefile b/contrib/array/Makefile index dd2ff66091d..9459f9c9bc3 100644 --- a/contrib/array/Makefile +++ b/contrib/array/Makefile @@ -15,36 +15,35 @@ INCLUDE_OPT = -I ./ \ -I $(SRCDIR)/include \ -I $(SRCDIR)/port/$(PORTNAME) -CFLAGS += $(INCLUDE_OPT) - -ifeq ($(PORTNAME), linux) - ifdef LINUX_ELF - ifeq ($(CC), gcc) - CFLAGS += -fPIC - endif - endif -endif - -ifeq ($(PORTNAME), i386_solaris) - CFLAGS+= -fPIC -endif +CFLAGS += $(INCLUDE_OPT) $(CFLAGS_SL) MODNAME = array_iterator MODULE = $(MODNAME)$(DLSUFFIX) +MODDIR = $(LIBDIR)/modules + +SQLDIR = $(LIBDIR)/sql + all: module sql module: $(MODULE) sql: $(MODNAME).sql -install: $(MODULE) - cp -p $(MODULE) $(LIBDIR)/modules - cd $(LIBDIR)/modules; strip $(MODULE) +install: $(MODULE) $(MODDIR) $(SQLDIR) + cp -p $(MODULE) $(MODDIR)/ + strip $(MODDIR)/$(MODULE) + cp -p $(MODNAME).sql $(SQLDIR)/ + +$(MODDIR): + mkdir -p $@ + +$(SQLDIR): + mkdir -p $@ %.sql: %.sql.in - sed "s|MODULE_PATHNAME|$(LIBDIR)/modules/$(MODULE)|" < $< > $@ + sed "s|MODULE_PATHNAME|$(MODDIR)/$(MODULE)|" < $< > $@ .SUFFIXES: $(DLSUFFIX) @@ -55,7 +54,7 @@ depend dep: $(CC) -MM $(INCLUDE_OPT) *.c >depend clean: - rm -f $(MODULE) $(MODNAME).sql + rm -f *~ $(MODULE) $(MODNAME).sql ifeq (depend,$(wildcard depend)) include depend diff --git a/contrib/array/array_iterator.c b/contrib/array/array_iterator.c index 9b6d9f8f4cf..06028ff4c6d 100644 --- a/contrib/array/array_iterator.c +++ b/contrib/array/array_iterator.c @@ -6,7 +6,10 @@ * elements of the array and the value and compute a result as * the logical OR or AND of the iteration results. * - * Copyright (c) 1997, Massimo Dal Zotto <dz@cs.unitn.it> + * Copyright (c) 1998, Massimo Dal Zotto <dz@cs.unitn.it> + * + * This file is distributed under the GNU General Public License + * either version 2, or (at your option) any later version. */ #include <ctype.h> @@ -33,8 +36,7 @@ array_iterator(Oid elemtype, Oid proc, int and, ArrayType *array, Datum value) TypeTupleForm typ_struct; bool typbyval; int typlen; - func_ptr proc_fn; - int pronargs; + FmgrInfo finfo; int nitems, i, result; @@ -70,9 +72,8 @@ array_iterator(Oid elemtype, Oid proc, int and, ArrayType *array, Datum value) typbyval = typ_struct->typbyval; /* Lookup the function entry point */ - proc_fn = (func_ptr) NULL; - fmgr_info(proc, &pronargs); /* (proc, &proc_fn, &pronargs); */ - if ((proc_fn == NULL) || (pronargs != 2)) + fmgr_info(proc, &finfo); + if ((finfo.fn_oid == 0) || (finfo.fn_nargs != 2)) { elog(ERROR, "array_iterator: fmgr_info lookup failed for oid %d", proc); return (0); @@ -88,21 +89,21 @@ array_iterator(Oid elemtype, Oid proc, int and, ArrayType *array, Datum value) switch (typlen) { case 1: - result = (int) (*proc_fn) (*p, value); + result = (int) (*(finfo.fn_addr)) (*p, value); break; case 2: - result = (int) (*proc_fn) (*(int16 *) p, value); + result = (int) (*(finfo.fn_addr)) (*(int16 *) p, value); break; case 3: case 4: - result = (int) (*proc_fn) (*(int32 *) p, value); + result = (int) (*(finfo.fn_addr)) (*(int32 *) p, value); break; } p += typlen; } else { - result = (int) (*proc_fn) (p, value); + result = (int) (*(finfo.fn_addr)) (p, value); if (typlen > 0) p += typlen; else @@ -167,47 +168,6 @@ array_all_textregexeq(ArrayType *array, char *value) } /* - * Iterator functions for type _char16. Note that the regexp - * operators take the second argument of type text. - */ - -int32 -array_char16eq(ArrayType *array, char *value) -{ - return array_iterator((Oid) 20, /* char16 */ - (Oid) 1275, /* char16eq */ - 0, /* logical or */ - array, (Datum) value); -} - -int32 -array_all_char16eq(ArrayType *array, char *value) -{ - return array_iterator((Oid) 20, /* char16 */ - (Oid) 1275, /* char16eq */ - 1, /* logical and */ - array, (Datum) value); -} - -int32 -array_char16regexeq(ArrayType *array, char *value) -{ - return array_iterator((Oid) 20, /* char16 */ - (Oid) 1288, /* char16regexeq */ - 0, /* logical or */ - array, (Datum) value); -} - -int32 -array_all_char16regexeq(ArrayType *array, char *value) -{ - return array_iterator((Oid) 20, /* char16 */ - (Oid) 1288, /* char16regexeq */ - 1, /* logical and */ - array, (Datum) value); -} - -/* * Iterator functions for type _int4 */ @@ -320,3 +280,11 @@ array_all_int4le(ArrayType *array, int4 value) } /* end of file */ + +/* + * Local variables: + * tab-width: 4 + * c-indent-level: 4 + * c-basic-offset: 4 + * End: + */ diff --git a/contrib/array/array_iterator.sql.in b/contrib/array/array_iterator.sql.in index 6489545d97d..40deb7e0c60 100644 --- a/contrib/array/array_iterator.sql.in +++ b/contrib/array/array_iterator.sql.in @@ -1,6 +1,13 @@ --- SQL code to define the new array iterator functions and operators +-- array_iterator.sql -- +-- +-- SQL code to define the array iterator functions and operators. +-- +-- Copyright (c) 1998, Massimo Dal Zotto <dz@cs.unitn.it> +-- +-- This file is distributed under the GNU General Public License +-- either version 2, or (at your option) any later version. --- define the array operators *=, **=, *~ and **~ for type _text +-- Define the array functions *=, **=, *~ and **~ for type _text -- create function array_texteq(_text, text) returns bool as 'MODULE_PATHNAME' @@ -38,47 +45,7 @@ create operator **~ ( rightarg=text, procedure=array_all_textregexeq); - --- define the array operators *=, **=, *~ and **~ for type _char16 --- -create function array_char16eq(_char16, char16) returns bool - as 'MODULE_PATHNAME' - language 'c'; - -create function array_all_char16eq(_char16, char16) returns bool - as 'MODULE_PATHNAME' - language 'c'; - -create function array_char16regexeq(_char16, text) returns bool - as 'MODULE_PATHNAME' - language 'c'; - -create function array_all_char16regexeq(_char16, text) returns bool - as 'MODULE_PATHNAME' - language 'c'; - -create operator *= ( - leftarg=_char16, - rightarg=char16, - procedure=array_char16eq); - -create operator **= ( - leftarg=_char16, - rightarg=char16, - procedure=array_all_char16eq); - -create operator *~ ( - leftarg=_char16, - rightarg=text, - procedure=array_char16regexeq); - -create operator **~ ( - leftarg=_char16, - rightarg=text, - procedure=array_all_char16regexeq); - - --- define the array operators *=, **=, *> and **> for type _int4 +-- Define the array functions *=, **=, *> and **> for type _int4 -- create function array_int4eq(_int4, int4) returns bool as 'MODULE_PATHNAME' @@ -128,6 +95,8 @@ create function array_all_int4le(_int4, int4) returns bool as 'MODULE_PATHNAME' language 'c'; +-- Define the operators corresponding to the above functions +-- create operator *= ( leftarg=_int4, rightarg=int4, |