Add in Vadim's multikey functions/examples as part of contrib

This commit is contained in:
Marc G. Fournier 1997-03-18 18:31:43 +00:00
parent b5e16b1869
commit c3d637ac3a
3 changed files with 185 additions and 0 deletions

29
contrib/multikey/Makefile Normal file
View File

@ -0,0 +1,29 @@
POSTSRC= /home/postgres/postgres95/src
include $(POSTSRC)/Makefile.global
include $(POSTSRC)/Makefile.custom
CFLAGS= $(CFLAGS_SL) -Wall -Wmissing-prototypes -I$(POSTSRC)/include
%.so: %.o
$(LD) -x -r -o $<.obj $<
@echo building shared object $@
@rm -f $@.pic
@${AR} cq $@.pic `lorder $<.obj | tsort`
${RANLIB} $@.pic
@rm -f $@
$(LD) -x -Bshareable -Bforcearchive \
-o $@ $@.pic
#
# build dynamically-loaded object file
#
DLOBJS= multikey.so
objdir= ./
CLEANFILES+= $(DLOBJS)
all:: $(DLOBJS)
$(DLOBJS): multikey.c

View File

@ -0,0 +1,15 @@
drop function create_mki_2 (text, text, text, text);
drop function create_mki_3 (text, text, text, text, text);
drop function create_mki_4 (text, text, text, text, text, text);
create function create_mki_2 (text, text, text, text)
returns int4 as '/home/postgres/My/Btree/MULTIKEY/multikey.so'
language 'c';
create function create_mki_3 (text, text, text, text, text)
returns int4 as '/home/postgres/My/Btree/MULTIKEY/multikey.so'
language 'c';
create function create_mki_4 (text, text, text, text, text, text)
returns int4 as '/home/postgres/My/Btree/MULTIKEY/multikey.so'
language 'c';

141
contrib/multikey/multikey.c Normal file
View File

@ -0,0 +1,141 @@
/*-------------------------------------------------------------------------
*
* multikey.c--
* POSTGRES multikey indices create code.
*
*-------------------------------------------------------------------------
*/
#include <stdio.h>
#include <string.h>
#include <postgres.h>
#include <storage/lmgr.h>
#include <nodes/parsenodes.h>
#include <commands/defrem.h>
#include <utils/builtins.h>
int4 create_mki_2 (struct varlena * index, struct varlena * rel,
struct varlena * a1, struct varlena * a2);
int4 create_mki_3 (struct varlena * index, struct varlena * rel,
struct varlena * a1, struct varlena * a2,
struct varlena * a3);
int4 create_mki_4 (struct varlena * index, struct varlena * rel,
struct varlena * a1, struct varlena * a2,
struct varlena * a3, struct varlena * a4);
extern bool FastBuild;
static bool BuildMode;
int4 create_mki_2 (struct varlena * index, struct varlena * rel,
struct varlena * a1, struct varlena * a2)
{
char * indexname = textout (index);
char * relname = textout (rel);
char * a1name = textout (a1);
char * a2name = textout (a2);
IndexElem *ie1 = makeNode(IndexElem);
IndexElem *ie2 = makeNode(IndexElem);
List *alist;
ie1->name = a1name;
ie1->args = NIL; ie1->class = NULL; ie1->tname = (TypeName*)NULL;
ie2->name = a2name;
ie2->args = NIL; ie2->class = NULL; ie2->tname = (TypeName*)NULL;
alist = lcons (ie2,NIL);
alist = lcons (ie1,alist);
BuildMode = FastBuild;
FastBuild = false; /* for the moment */
DefineIndex (relname, indexname, "btree", alist,
(List*) NULL, false, (Expr*)NULL, (List*)NULL);
FastBuild = BuildMode;
return (0);
}
int4 create_mki_3 (struct varlena * index, struct varlena * rel,
struct varlena * a1, struct varlena * a2,
struct varlena * a3)
{
char * indexname = textout (index);
char * relname = textout (rel);
char * a1name = textout (a1);
char * a2name = textout (a2);
char * a3name = textout (a3);
IndexElem *ie1 = makeNode(IndexElem);
IndexElem *ie2 = makeNode(IndexElem);
IndexElem *ie3 = makeNode(IndexElem);
List *alist;
ie1->name = a1name;
ie1->args = NIL; ie1->class = NULL; ie1->tname = (TypeName*)NULL;
ie2->name = a2name;
ie2->args = NIL; ie2->class = NULL; ie2->tname = (TypeName*)NULL;
ie3->name = a3name;
ie3->args = NIL; ie3->class = NULL; ie3->tname = (TypeName*)NULL;
alist = lcons (ie3,NIL);
alist = lcons (ie2,alist);
alist = lcons (ie1,alist);
BuildMode = FastBuild;
FastBuild = false; /* for the moment */
DefineIndex (relname, indexname, "btree", alist,
(List*) NULL, false, (Expr*)NULL, (List*)NULL);
FastBuild = BuildMode;
return (0);
}
int4 create_mki_4 (struct varlena * index, struct varlena * rel,
struct varlena * a1, struct varlena * a2,
struct varlena * a3, struct varlena * a4)
{
char * indexname = textout (index);
char * relname = textout (rel);
char * a1name = textout (a1);
char * a2name = textout (a2);
char * a3name = textout (a3);
char * a4name = textout (a4);
IndexElem *ie1 = makeNode(IndexElem);
IndexElem *ie2 = makeNode(IndexElem);
IndexElem *ie3 = makeNode(IndexElem);
IndexElem *ie4 = makeNode(IndexElem);
List *alist;
ie1->name = a1name;
ie1->args = NIL; ie1->class = NULL; ie1->tname = (TypeName*)NULL;
ie2->name = a2name;
ie2->args = NIL; ie2->class = NULL; ie2->tname = (TypeName*)NULL;
ie3->name = a3name;
ie3->args = NIL; ie3->class = NULL; ie3->tname = (TypeName*)NULL;
ie4->name = a4name;
ie4->args = NIL; ie4->class = NULL; ie4->tname = (TypeName*)NULL;
alist = lcons (ie4,NIL);
alist = lcons (ie3,alist);
alist = lcons (ie2,alist);
alist = lcons (ie1,alist);
BuildMode = FastBuild;
FastBuild = false; /* for the moment */
DefineIndex (relname, indexname, "btree", alist,
(List*) NULL, false, (Expr*)NULL, (List*)NULL);
FastBuild = BuildMode;
return (0);
}