mirror of
https://github.com/postgres/postgres.git
synced 2025-06-23 14:01:44 +03:00
Massive commit to run PGINDENT on all *.c and *.h files.
This commit is contained in:
@ -1,64 +1,64 @@
|
||||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* beard.c--
|
||||
* sample routines to use large objects
|
||||
* 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.1.1.1 1996/07/09 06:22:34 scrappy Exp $
|
||||
* $Header: /cvsroot/pgsql/src/tutorial/C-code/Attic/beard.c,v 1.2 1997/09/07 05:04:34 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
typedef struct ImageHdr {
|
||||
int size;
|
||||
} ImageHdr;
|
||||
typedef struct ImageHdr
|
||||
{
|
||||
int size;
|
||||
} ImageHdr;
|
||||
|
||||
#define BUFSIZE 10
|
||||
|
||||
/*
|
||||
* beard -
|
||||
* clips lower 1/3 of picture and return as large object
|
||||
* 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;
|
||||
Oid beard;
|
||||
int pic_fd,
|
||||
beard_fd;
|
||||
ImageHdr ihdr;
|
||||
char buf[BUFSIZE];
|
||||
int cc;
|
||||
|
||||
if ((pic_fd = lo_open(picture, INV_READ)) == -1)
|
||||
elog(WARN, "Cannot access picture large object");
|
||||
if ((pic_fd = lo_open(picture, INV_READ)) == -1)
|
||||
elog(WARN, "Cannot access picture large object");
|
||||
|
||||
if (lo_read(pic_fd, (char*)&ihdr, sizeof(ihdr)) != sizeof(ihdr))
|
||||
elog(WARN, "Picture large object corrupted");
|
||||
if (lo_read(pic_fd, (char *) &ihdr, sizeof(ihdr)) != sizeof(ihdr))
|
||||
elog(WARN, "Picture large object corrupted");
|
||||
|
||||
beardOffset = (ihdr.size / 3) * 2;
|
||||
beardOffset = (ihdr.size / 3) * 2;
|
||||
|
||||
/*
|
||||
* new large object
|
||||
*/
|
||||
if ((beard = lo_creat(INV_MD)) == 0) /* ?? is this right? */
|
||||
elog(WARN, "Cannot create new large object");
|
||||
/*
|
||||
* new large object
|
||||
*/
|
||||
if ((beard = lo_creat(INV_MD)) == 0) /* ?? is this right? */
|
||||
elog(WARN, "Cannot create new large object");
|
||||
|
||||
if ((beard_fd = lo_open(beard, INV_WRITE)) == -1)
|
||||
elog(WARN, "Cannot access beard large object");
|
||||
if ((beard_fd = lo_open(beard, INV_WRITE)) == -1)
|
||||
elog(WARN, "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(WARN, "error while writing 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(WARN, "error while writing large object");
|
||||
}
|
||||
|
||||
lo_close(pic_fd);
|
||||
lo_close(beard_fd);
|
||||
lo_close(pic_fd);
|
||||
lo_close(beard_fd);
|
||||
|
||||
return beard;
|
||||
return beard;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
@ -12,79 +12,82 @@
|
||||
#include "utils/palloc.h"
|
||||
#include "utils/mcxt.h"
|
||||
|
||||
typedef struct Complex {
|
||||
double x;
|
||||
double y;
|
||||
} Complex;
|
||||
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);
|
||||
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 *
|
||||
complex_in(char *str)
|
||||
{
|
||||
double x, y;
|
||||
Complex *result;
|
||||
|
||||
if (sscanf(str, " ( %lf , %lf )", &x, &y) != 2) {
|
||||
elog(WARN, "complex_in: error in parsing \"%s\"", str);
|
||||
return NULL;
|
||||
}
|
||||
result = (Complex *)palloc(sizeof(Complex));
|
||||
result->x = x;
|
||||
result->y = y;
|
||||
return (result);
|
||||
double x,
|
||||
y;
|
||||
Complex *result;
|
||||
|
||||
if (sscanf(str, " ( %lf , %lf )", &x, &y) != 2)
|
||||
{
|
||||
elog(WARN, "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 ...
|
||||
* 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 *out_func(char *);
|
||||
*/
|
||||
char *
|
||||
complex_out(Complex *complex)
|
||||
char *
|
||||
complex_out(Complex * complex)
|
||||
{
|
||||
char *result;
|
||||
char *result;
|
||||
|
||||
if (complex == NULL)
|
||||
return(NULL);
|
||||
if (complex == NULL)
|
||||
return (NULL);
|
||||
|
||||
result = (char *) palloc(60);
|
||||
sprintf(result, "(%g,%g)", complex->x, complex->y);
|
||||
return(result);
|
||||
result = (char *) palloc(60);
|
||||
sprintf(result, "(%g,%g)", complex->x, complex->y);
|
||||
return (result);
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
* New Operators
|
||||
*****************************************************************************/
|
||||
|
||||
Complex *
|
||||
complex_add(Complex *a, Complex *b)
|
||||
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);
|
||||
Complex *result;
|
||||
|
||||
result = (Complex *) palloc(sizeof(Complex));
|
||||
result->x = a->x + b->x;
|
||||
result->y = a->y + b->y;
|
||||
return (result);
|
||||
}
|
||||
|
||||
|
||||
@ -95,50 +98,62 @@ complex_add(Complex *a, Complex *b)
|
||||
#define Mag(c) ((c)->x*(c)->x + (c)->y*(c)->y)
|
||||
|
||||
bool
|
||||
complex_abs_lt(Complex *a, Complex *b)
|
||||
complex_abs_lt(Complex * a, Complex * b)
|
||||
{
|
||||
double amag = Mag(a), bmag = Mag(b);
|
||||
return (amag<bmag);
|
||||
double amag = Mag(a),
|
||||
bmag = Mag(b);
|
||||
|
||||
return (amag < bmag);
|
||||
}
|
||||
|
||||
bool
|
||||
complex_abs_le(Complex *a, Complex *b)
|
||||
complex_abs_le(Complex * a, Complex * b)
|
||||
{
|
||||
double amag = Mag(a), bmag = Mag(b);
|
||||
return (amag<=bmag);
|
||||
double amag = Mag(a),
|
||||
bmag = Mag(b);
|
||||
|
||||
return (amag <= bmag);
|
||||
}
|
||||
|
||||
bool
|
||||
complex_abs_eq(Complex *a, Complex *b)
|
||||
complex_abs_eq(Complex * a, Complex * b)
|
||||
{
|
||||
double amag = Mag(a), bmag = Mag(b);
|
||||
return (amag==bmag);
|
||||
double amag = Mag(a),
|
||||
bmag = Mag(b);
|
||||
|
||||
return (amag == bmag);
|
||||
}
|
||||
|
||||
bool
|
||||
complex_abs_ge(Complex *a, Complex *b)
|
||||
complex_abs_ge(Complex * a, Complex * b)
|
||||
{
|
||||
double amag = Mag(a), bmag = Mag(b);
|
||||
return (amag>=bmag);
|
||||
double amag = Mag(a),
|
||||
bmag = Mag(b);
|
||||
|
||||
return (amag >= bmag);
|
||||
}
|
||||
|
||||
bool
|
||||
complex_abs_gt(Complex *a, Complex *b)
|
||||
complex_abs_gt(Complex * a, Complex * b)
|
||||
{
|
||||
double amag = Mag(a), bmag = Mag(b);
|
||||
return (amag>bmag);
|
||||
double amag = Mag(a),
|
||||
bmag = Mag(b);
|
||||
|
||||
return (amag > bmag);
|
||||
}
|
||||
|
||||
int4
|
||||
complex_abs_cmp(Complex *a, Complex *b)
|
||||
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;
|
||||
double amag = Mag(a),
|
||||
bmag = Mag(b);
|
||||
|
||||
if (amag < bmag)
|
||||
return -1;
|
||||
else if (amag > bmag)
|
||||
return 1;
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
@ -151,21 +166,21 @@ complex_abs_cmp(Complex *a, Complex *b)
|
||||
* POSTGRES crashing, it is impossible to tell whether the bug is in your
|
||||
* code or POSTGRES's.
|
||||
*/
|
||||
void test_main(void);
|
||||
void test_main(void);
|
||||
void
|
||||
test_main()
|
||||
{
|
||||
Complex *a;
|
||||
Complex *b;
|
||||
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));
|
||||
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));
|
||||
}
|
||||
|
@ -8,70 +8,73 @@
|
||||
|
||||
#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() */
|
||||
#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
|
||||
/* 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);
|
||||
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);
|
||||
return (arg + 1);
|
||||
}
|
||||
|
||||
char16 *
|
||||
concat16(char16 *arg1, char16 *arg2)
|
||||
char16 *
|
||||
concat16(char16 * arg1, char16 * arg2)
|
||||
{
|
||||
char16 *new_c16 = (char16 *) palloc(sizeof(char16));
|
||||
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));
|
||||
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)
|
||||
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 */
|
||||
/*
|
||||
* VARSIZE is the total size of the struct in bytes.
|
||||
*/
|
||||
text *new_t = (text *) palloc(VARSIZE(t));
|
||||
|
||||
return(new_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)
|
||||
c_overpaid(TUPLE t, /* the current instance of EMP */
|
||||
int4 limit)
|
||||
{
|
||||
bool isnull = false;
|
||||
int4 salary;
|
||||
bool isnull = false;
|
||||
int4 salary;
|
||||
|
||||
salary = (int4) GetAttributeByName(t, "salary", &isnull);
|
||||
salary = (int4) GetAttributeByName(t, "salary", &isnull);
|
||||
|
||||
if (isnull)
|
||||
return (false);
|
||||
return(salary > limit);
|
||||
if (isnull)
|
||||
return (false);
|
||||
return (salary > limit);
|
||||
}
|
||||
|
Reference in New Issue
Block a user