]> granicus.if.org Git - postgresql/commitdiff
Add in Vadim's multikey functions/examples as part of contrib
authorMarc G. Fournier <scrappy@hub.org>
Tue, 18 Mar 1997 18:31:43 +0000 (18:31 +0000)
committerMarc G. Fournier <scrappy@hub.org>
Tue, 18 Mar 1997 18:31:43 +0000 (18:31 +0000)
contrib/multikey/Makefile [new file with mode: 0644]
contrib/multikey/create.sql [new file with mode: 0644]
contrib/multikey/multikey.c [new file with mode: 0644]

diff --git a/contrib/multikey/Makefile b/contrib/multikey/Makefile
new file mode 100644 (file)
index 0000000..45ab0ab
--- /dev/null
@@ -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
diff --git a/contrib/multikey/create.sql b/contrib/multikey/create.sql
new file mode 100644 (file)
index 0000000..3ccfec6
--- /dev/null
@@ -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';
diff --git a/contrib/multikey/multikey.c b/contrib/multikey/multikey.c
new file mode 100644 (file)
index 0000000..33bffdd
--- /dev/null
@@ -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);
+
+}