aboutsummaryrefslogtreecommitdiff
path: root/src/tutorial/C-code
diff options
context:
space:
mode:
Diffstat (limited to 'src/tutorial/C-code')
-rw-r--r--src/tutorial/C-code/Makefile18
-rw-r--r--src/tutorial/C-code/beard.c64
-rw-r--r--src/tutorial/C-code/complex.c186
-rw-r--r--src/tutorial/C-code/funcs.c81
4 files changed, 0 insertions, 349 deletions
diff --git a/src/tutorial/C-code/Makefile b/src/tutorial/C-code/Makefile
deleted file mode 100644
index ec1fa1f21f5..00000000000
--- a/src/tutorial/C-code/Makefile
+++ /dev/null
@@ -1,18 +0,0 @@
-SRCDIR= ../..
-include ../../Makefile.global
-
-CFLAGS+= -I../../include -I$(LIBPQDIR)
-
-#
-# And where libpq goes, so goes the authentication stuff...
-#
-ifdef KRBVERS
-LDFLAGS+= $(KRBLIBS)
-CFLAGS+= $(KRBFLAGS)
-endif
-
-all: complex$(DLSUFFIX) funcs$(DLSUFFIX)
-
-clean:
- rm -f complex$(DLSUFFIX) funcs$(DLSUFFIX)
-
diff --git a/src/tutorial/C-code/beard.c b/src/tutorial/C-code/beard.c
deleted file mode 100644
index 6e11ddea856..00000000000
--- a/src/tutorial/C-code/beard.c
+++ /dev/null
@@ -1,64 +0,0 @@
-/*-------------------------------------------------------------------------
- *
- * beard.c--
- * sample routines to use large objects
- *
- * Copyright (c) 1994, Regents of the University of California
- *
- *
- * IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/tutorial/C-code/Attic/beard.c,v 1.5 1998/01/07 21:07:03 momjian Exp $
- *
- *-------------------------------------------------------------------------
- */
-
-typedef struct ImageHdr
-{
- int size;
-} ImageHdr;
-
-#define BUFSIZE 10
-
-/*
- * beard -
- * clips lower 1/3 of picture and return as large object
- */
-Oid
-beard(Oid picture)
-{
- Oid beard;
- int pic_fd,
- beard_fd;
- ImageHdr ihdr;
- char buf[BUFSIZE];
- int cc;
-
- if ((pic_fd = lo_open(picture, INV_READ)) == -1)
- elog(ERROR, "Cannot access picture large object");
-
- if (lo_read(pic_fd, (char *) &ihdr, sizeof(ihdr)) != sizeof(ihdr))
- elog(ERROR, "Picture large object corrupted");
-
- beardOffset = (ihdr.size / 3) * 2;
-
- /*
- * new large object
- */
- if ((beard = lo_creat(INV_MD)) == 0) /* ?? is this right? */
- elog(ERROR, "Cannot create new large object");
-
- if ((beard_fd = lo_open(beard, INV_WRITE)) == -1)
- elog(ERROR, "Cannot access beard large object");
-
- lo_lseek(pic_fd, beardOffset, SET_CUR);
- while ((cc = lo_read(pic_fd, buf, BUFSIZE)) > 0)
- {
- if (lo_write(beard_fd, buf, cc) != cc)
- elog(ERROR, "error while writing large object");
- }
-
- lo_close(pic_fd);
- lo_close(beard_fd);
-
- return beard;
-}
diff --git a/src/tutorial/C-code/complex.c b/src/tutorial/C-code/complex.c
deleted file mode 100644
index e5bea2d1134..00000000000
--- a/src/tutorial/C-code/complex.c
+++ /dev/null
@@ -1,186 +0,0 @@
-/******************************************************************************
- This file contains routines that can be bound to a Postgres backend and
- called by the backend in the process of processing queries. The calling
- format for these routines is dictated by Postgres architecture.
-******************************************************************************/
-
-#include <stdio.h>
-/* do not include libpq-fe.h for backend-loaded functions*/
-/* #include "libpq-fe.h" */
-#include "postgres.h"
-#include "utils/elog.h"
-#include "utils/palloc.h"
-#include "utils/mcxt.h"
-
-typedef struct Complex
-{
- double x;
- double y;
-} Complex;
-
-/* These prototypes declare the requirements that Postgres places on these
- user written functions.
-*/
-Complex *complex_in(char *str);
-char *complex_out(Complex * complex);
-Complex *complex_add(Complex * a, Complex * b);
-bool complex_abs_lt(Complex * a, Complex * b);
-bool complex_abs_le(Complex * a, Complex * b);
-bool complex_abs_eq(Complex * a, Complex * b);
-bool complex_abs_ge(Complex * a, Complex * b);
-bool complex_abs_gt(Complex * a, Complex * b);
-int4 complex_abs_cmp(Complex * a, Complex * b);
-
-
-/*****************************************************************************
- * Input/Output functions
- *****************************************************************************/
-
-Complex *
-complex_in(char *str)
-{
- double x,
- y;
- Complex *result;
-
- if (sscanf(str, " ( %lf , %lf )", &x, &y) != 2)
- {
- elog(ERROR, "complex_in: error in parsing \"%s\"", str);
- return NULL;
- }
- result = (Complex *) palloc(sizeof(Complex));
- result->x = x;
- result->y = y;
- return (result);
-}
-
-/*
- * You might have noticed a slight inconsistency between the following
- * declaration and the SQL definition:
- * CREATE FUNCTION complex_out(opaque) RETURNS opaque ...
- * The reason is that the argument pass into complex_out is really just a
- * pointer. POSTGRES thinks all output functions are:
- * char *out_func(char *);
- */
-char *
-complex_out(Complex * complex)
-{
- char *result;
-
- if (complex == NULL)
- return (NULL);
-
- result = (char *) palloc(60);
- sprintf(result, "(%g,%g)", complex->x, complex->y);
- return (result);
-}
-
-/*****************************************************************************
- * New Operators
- *****************************************************************************/
-
-Complex *
-complex_add(Complex * a, Complex * b)
-{
- Complex *result;
-
- result = (Complex *) palloc(sizeof(Complex));
- result->x = a->x + b->x;
- result->y = a->y + b->y;
- return (result);
-}
-
-
-/*****************************************************************************
- * Operator class for defining B-tree index
- *****************************************************************************/
-
-#define Mag(c) ((c)->x*(c)->x + (c)->y*(c)->y)
-
-bool
-complex_abs_lt(Complex * a, Complex * b)
-{
- double amag = Mag(a),
- bmag = Mag(b);
-
- return (amag < bmag);
-}
-
-bool
-complex_abs_le(Complex * a, Complex * b)
-{
- double amag = Mag(a),
- bmag = Mag(b);
-
- return (amag <= bmag);
-}
-
-bool
-complex_abs_eq(Complex * a, Complex * b)
-{
- double amag = Mag(a),
- bmag = Mag(b);
-
- return (amag == bmag);
-}
-
-bool
-complex_abs_ge(Complex * a, Complex * b)
-{
- double amag = Mag(a),
- bmag = Mag(b);
-
- return (amag >= bmag);
-}
-
-bool
-complex_abs_gt(Complex * a, Complex * b)
-{
- double amag = Mag(a),
- bmag = Mag(b);
-
- return (amag > bmag);
-}
-
-int4
-complex_abs_cmp(Complex * a, Complex * b)
-{
- double amag = Mag(a),
- bmag = Mag(b);
-
- if (amag < bmag)
- return -1;
- else if (amag > bmag)
- return 1;
- else
- return 0;
-}
-
-/*****************************************************************************
- * test code
- *****************************************************************************/
-
-/*
- * You should always test your code separately. Trust me, using POSTGRES to
- * debug your C function will be very painful and unproductive. In case of
- * POSTGRES crashing, it is impossible to tell whether the bug is in your
- * code or POSTGRES's.
- */
-void test_main(void);
-void
-test_main()
-{
- Complex *a;
- Complex *b;
-
- a = complex_in("(4.01, 3.77 )");
- printf("a = %s\n", complex_out(a));
- b = complex_in("(1.0,2.0)");
- printf("b = %s\n", complex_out(b));
- printf("a + b = %s\n", complex_out(complex_add(a, b)));
- printf("a < b = %d\n", complex_abs_lt(a, b));
- printf("a <= b = %d\n", complex_abs_le(a, b));
- printf("a = b = %d\n", complex_abs_eq(a, b));
- printf("a >= b = %d\n", complex_abs_ge(a, b));
- printf("a > b = %d\n", complex_abs_gt(a, b));
-}
diff --git a/src/tutorial/C-code/funcs.c b/src/tutorial/C-code/funcs.c
deleted file mode 100644
index 71371f51609..00000000000
--- a/src/tutorial/C-code/funcs.c
+++ /dev/null
@@ -1,81 +0,0 @@
-/******************************************************************************
- These are user-defined functions that can be bound to a Postgres backend
- and called by Postgres to execute SQL functions of the same name.
-
- The calling format for these functions is defined by the CREATE FUNCTION
- SQL statement that binds them to the backend.
-*****************************************************************************/
-
-#include <string.h>
-#include <stdio.h>
-#include "postgres.h" /* for char16, etc. */
-#include "utils/palloc.h" /* for palloc */
-#include "libpq-fe.h" /* for TUPLE */
-#include "executor/executor.h" /* for GetAttributeByName() */
-
-/* The following prototypes declare what we assume the user declares to
- Postgres in his CREATE FUNCTION statement.
-*/
-
-int add_one(int arg);
-char16 *concat16(char16 *arg1, char16 *arg2);
-text *copytext(text *t);
-
-bool
-c_overpaid(TUPLE t, /* the current instance of EMP */
- int4 limit);
-
-
-
-int
-add_one(int arg)
-{
- return (arg + 1);
-}
-
-char16 *
-concat16(char16 *arg1, char16 *arg2)
-{
- char16 *new_c16 = (char16 *) palloc(sizeof(char16));
-
- MemSet(new_c16, 0, sizeof(char16));
- strncpy((char *) new_c16, (char *) arg1, 16);
- return (char16 *) (strncat((char *) new_c16, (char *) arg2, 16));
-}
-
-text *
-copytext(text *t)
-{
-
- /*
- * VARSIZE is the total size of the struct in bytes.
- */
- text *new_t = (text *) palloc(VARSIZE(t));
-
- MemSet(new_t, 0, VARSIZE(t));
-
- VARSIZE(new_t) = VARSIZE(t);
-
- /*
- * VARDATA is a pointer to the data region of the struct.
- */
- memcpy((void *) VARDATA(new_t), /* destination */
- (void *) VARDATA(t), /* source */
- VARSIZE(t) - VARHDRSZ); /* how many bytes */
-
- return (new_t);
-}
-
-bool
-c_overpaid(TUPLE t, /* the current instance of EMP */
- int4 limit)
-{
- bool isnull = false;
- int4 salary;
-
- salary = (int4) GetAttributeByName(t, "salary", &isnull);
-
- if (isnull)
- return (false);
- return (salary > limit);
-}