ftp.nice.ch/pub/next/database/postgres-4.2/postgresLibs.NIHS.b.tar.gz#/postgresLibs.pkg/postgresLibs.tar.gz#/include/tmp/libpq.h

This is libpq.h in view mode; [Download] [Up]

/* ----------------------------------------------------------------
 *   FILE
 *	libpq.h
 *
 *   DESCRIPTION
 *	POSTGRES LIBPQ buffer structure definitions.
 *
 *   NOTES
 *	This file contains definitions for structures and
 *	externs for functions used by both frontend applications
 *	and the POSTGRES backend.  See the files libpq-fe.h and
 *	libpq-be.h for frontend/backend specific information
 *
 *   IDENTIFICATION
 *	/usr/local/devel/postgres-v4r2/src/backend/tmp/RCS/libpq.h,v 1.26 1994/02/07 11:46:13 aoki Exp
 * ----------------------------------------------------------------
 */

#ifndef LibpqIncluded 	/* include this file only once. */
#define LibpqIncluded 	1

#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <netinet/in.h>

#include "tmp/simplelists.h"
#include "utils/exc.h"
#include "tmp/postgres.h"

#include "tmp/pqcomm.h"

/* ----------------
 * PQArgBlock --
 *	Information (pointer to array of this structure) required
 *	for the PQfn() call.
 * ----------------
 */
typedef struct {
    int len;
    int isint;
    union {
        int *ptr;	/* can't use void (dec compiler barfs)	*/
	int integer;
    } u;
} PQArgBlock;

/* ----------------
 * TypeBlock --
 * 	Information about an attribute.
 * ----------------
 */
#define NameLength 16

typedef struct TypeBlock {
    char name[NameLength];	/* name of the attribute */
    int adtid;			/* adtid of the type */
    int adtsize;		/* adtsize of the type */
} TypeBlock;

/* ----------------
 * TupleBlock --
 *	Data of a tuple.
 * ----------------
 */
#define TupleBlockSize 100

typedef struct TupleBlock {
    char **values[TupleBlockSize];	/* an array of tuples */
    int *lengths[TupleBlockSize];       /* an array of length vec. foreach
					   tuple */
    struct TupleBlock *next;		/* next tuple block */
    int    tuple_index;			/* current tuple index */
} TupleBlock;

/* ----------------
 * GroupBuffer --
 * 	A group of tuples with the same attributes.
 * ----------------
 */
typedef struct GroupBuffer {
    int no_tuples;		/* number of tuples in this group */
    int no_fields;		/* number of attributes */
    TypeBlock *types;  		/* types of the attributes */
    TupleBlock *tuples;		/* tuples in this group */
    struct GroupBuffer *next;	/* next group */
} GroupBuffer;

/* ----------------
 * PortalBuffer --
 *	Data structure of a portal buffer.  
 * ----------------
 */
typedef struct PortalBuffer {
    int rule_p;			/* 1 if this is an asynchronized portal. */
    int no_tuples;		/* number of tuples in this portal buffer */
    int no_groups;		/* number of tuple groups */
    GroupBuffer *groups;	/* linked list of tuple groups */
} PortalBuffer;

/* ----------------
 * PortalEntry --
 *	an entry in the global portal table
 *
 * Note: the portalcxt is only meaningful for PQcalls made from
 *       within a postgres backend.  frontend apps should ignore it.
 * ----------------
 */
#define PortalNameLength 32

typedef struct PortalEntry {
    char 	  name[PortalNameLength]; /* name of this portal */
    PortalBuffer  *portal;	          /* tuples contained in this portal */
    Pointer	  portalcxt;	          /* memory context (for backend) */
    Pointer	  result;	          /* result for PQexec */
} PortalEntry;

/* #define MAXPORTALS 10 */
/* the portals[] array should not be statically sized to MAXPORTALS,         */
/* now portals[] starts off at PORTALS_INITIAL_SIZE, and grows dynamically  */
   
#define PORTALS_INITIAL_SIZE 32
#define PORTALS_GROW_BY      32

extern PortalEntry** portals;
extern size_t portals_array_size;

/*
 *  Asynchronous notification
 */
typedef struct PQNotifyList {
    char relname[NAMEDATALEN];	/* name of relation containing data */
    int be_pid;			/* process id of backend */
    int valid;			/* has this already been handled by user. */
    SLNode Node;
} PQNotifyList;

/*
 * Exceptions.
 */

#define libpq_raise(X, Y) ExcRaise((Exception *)(X), (ExcDetail) (Y),\
				   (ExcData)0, (ExcMessage) 0)

extern Exception MemoryError, PortalError, PostquelError, ProtocolError;

/* 
 * POSTGRES backend dependent Constants. 
 */

#define initstr_length 256
#define error_msg_length 4096
#define command_length 20
#define remark_length 80
#define portal_name_length 16

extern    char PQerrormsg[error_msg_length];
/*
 * External functions.
 */
/* portal.c */
extern void pqdebug ARGS((char *target, char *msg));
extern void pqdebug2 ARGS((char *target, char *msg1, char *msg2));
extern void PQtrace ARGS((void));
extern void PQuntrace ARGS((void));
extern int PQnportals ARGS((int rule_p));
extern void PQpnames ARGS((char **pnames, int rule_p));
extern PortalBuffer *PQparray ARGS((char *pname));
extern int PQrulep ARGS((PortalBuffer *portal));
extern int PQntuples ARGS((PortalBuffer *portal));
extern int PQninstances ARGS((PortalBuffer *portal));
extern int PQngroups ARGS((PortalBuffer *portal));
extern int PQntuplesGroup ARGS((PortalBuffer *portal, int group_index));
extern int PQninstancesGroup ARGS((PortalBuffer *portal, int group_index));
extern int PQnfieldsGroup ARGS((PortalBuffer *portal, int group_index));
extern int PQfnumberGroup ARGS((PortalBuffer *portal, int group_index, char *field_name));
extern char *PQfnameGroup ARGS((PortalBuffer *portal, int group_index, int field_number));
extern GroupBuffer *PQgroup ARGS((PortalBuffer *portal, int tuple_index));
extern int PQgetgroup ARGS((PortalBuffer *portal, int tuple_index));
extern int PQnfields ARGS((PortalBuffer *portal, int tuple_index));
extern int PQfnumber ARGS((PortalBuffer *portal, int tuple_index, char *field_name));
extern char *PQfname ARGS((PortalBuffer *portal, int tuple_index, int field_number));
extern int PQftype ARGS((PortalBuffer *portal, int tuple_index, int field_number));
extern int PQsametype ARGS((PortalBuffer *portal, int tuple_index1, int tuple_index2));
extern char *PQgetvalue ARGS((PortalBuffer *portal, int tuple_index, int field_number));
extern int PQgetlength ARGS((PortalBuffer *portal, int tuple_index, int field_number));
extern void PQclear ARGS((char *pname));
extern void PQcleanNotify ARGS((void));
extern void PQnotifies_init ARGS((void));
extern PQNotifyList *PQnotifies ARGS((void));
extern void PQremoveNotify ARGS((PQNotifyList *nPtr));
extern void PQappendNotify ARGS((char *relname, int pid));

/* portalbuf.c */
extern caddr_t pbuf_alloc ARGS((size_t size));
extern void pbuf_free ARGS((caddr_t pointer));
extern PortalBuffer *pbuf_addPortal ARGS((void));
extern GroupBuffer *pbuf_addGroup ARGS((PortalBuffer *portal));
extern TypeBlock *pbuf_addTypes ARGS((int n));
extern TupleBlock *pbuf_addTuples ARGS((void));
extern char **pbuf_addTuple ARGS((int n));
extern int *pbuf_addTupleValueLengths ARGS((int n));
extern char *pbuf_addValues ARGS((int n));
extern PortalEntry *pbuf_addEntry ARGS((void));
extern void pbuf_freeEntry ARGS((int i));
extern void pbuf_freeTypes ARGS((TypeBlock *types));
extern void pbuf_freeTuples ARGS((TupleBlock *tuples, int no_tuples, int no_fields));
extern void pbuf_freeGroup ARGS((GroupBuffer *group));
extern void pbuf_freePortal ARGS((PortalBuffer *portal));
extern int pbuf_getIndex ARGS((char *pname));
extern void pbuf_setportalinfo ARGS((PortalEntry *entry, char *pname));
extern PortalEntry *pbuf_setup ARGS((char *pname));
extern void pbuf_close ARGS((char *pname));
extern GroupBuffer *pbuf_findGroup ARGS((PortalBuffer *portal, int group_index));
extern int pbuf_findFnumber ARGS((GroupBuffer *group, char *field_name));
extern void pbuf_checkFnumber ARGS((GroupBuffer *group, int field_number));
extern char *pbuf_findFname ARGS((GroupBuffer *group, int field_number));

/* pqcomm.c */
extern void pq_init ARGS((int fd));
extern void pq_gettty ARGS((char *tp));
extern int pq_getport ARGS((void));
extern void pq_close ARGS((void));
extern void pq_flush ARGS((void));
extern int pq_getstr ARGS((char *s, int maxlen));
extern int PQgetline ARGS((char *s, int maxlen));
extern int PQputline ARGS((char *s));
extern int pq_getnchar ARGS((char *s, int off, int maxlen));
extern int pq_getint ARGS((int b));
extern void pq_putstr ARGS((char *s));
extern void pq_putnchar ARGS((char *s, int n));
extern void pq_putint ARGS((int i, int b));
extern int pq_sendoob ARGS((char *msg, int len));
extern int pq_recvoob ARGS((char *msgPtr, int *lenPtr));
extern int pq_getinaddr ARGS((struct sockaddr_in *sin, char *host, int port));
extern int pq_getinserv ARGS((struct sockaddr_in *sin, char *host, char *serv));
extern int pq_connect ARGS((char *dbname, char *user, char *args, char *hostName, char *debugTty, char *execFile, int portName));
extern void pq_regoob ARGS((void (*fptr)()));
extern void pq_unregoob ARGS((void));
extern void pq_async_notify ARGS((void));
extern int StreamServerPort ARGS((char *hostName, int portName, int *fdP));
extern int StreamConnection ARGS((int server_fd, Port *port));
extern int StreamClose ARGS((int sock));
extern int StreamOpen ARGS((char *hostName, int portName, Port *port));

#endif /* LibpqIncluded */

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.