mirror of https://github.com/postgres/postgres
parent
b5e16b1869
commit
c3d637ac3a
@ -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 |
@ -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'; |
@ -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); |
||||
|
||||
} |
Loading…
Reference in new issue