From: Bruce Momjian Date: Mon, 11 Oct 1999 18:51:10 +0000 (+0000) Subject: Update pgeasy. X-Git-Tag: REL7_0~1326 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=433c213533d49156fc87df98125a52e57f1b3e70;p=postgresql Update pgeasy. --- diff --git a/src/interfaces/libpgeasy/Makefile.in b/src/interfaces/libpgeasy/Makefile.in index 92d1f2ace5..2fca3f51a8 100644 --- a/src/interfaces/libpgeasy/Makefile.in +++ b/src/interfaces/libpgeasy/Makefile.in @@ -4,7 +4,7 @@ # Makefile for pgeasy library # # IDENTIFICATION -# $Header: /cvsroot/pgsql/src/interfaces/libpgeasy/Attic/Makefile.in,v 1.2 1999/10/11 18:16:06 momjian Exp $ +# $Header: /cvsroot/pgsql/src/interfaces/libpgeasy/Attic/Makefile.in,v 1.3 1999/10/11 18:51:09 momjian Exp $ # #------------------------------------------------------------------------- @@ -15,11 +15,13 @@ SO_MINOR_VERSION= 0 SRCDIR= @top_srcdir@ include $(SRCDIR)/Makefile.global +CFLAGS+= -I$(LIBPQDIR) + ifdef KRBVERS CFLAGS+= $(KRBFLAGS) endif -OBJS= pgeasy.o halt.o +OBJS= libpgeasy.o halt.o SHLIB_LINK+= -L../libpq -lpq @@ -38,9 +40,9 @@ include $(SRCDIR)/Makefile.shlib install: install-headers install-lib $(install-shlib-dep) -install-headers: pgeasy.h +install-headers: libpgeasy.h @if [ ! -d $(HEADERDIR) ]; then mkdir $(HEADERDIR); fi - $(INSTALL) $(INSTLOPTS) pgeasy.h $(HEADERDIR)/pgeasy.h + $(INSTALL) $(INSTLOPTS) libpgeasy.h $(HEADERDIR)/libpgeasy.h .PHONY: clean diff --git a/src/interfaces/libpgeasy/examples/pginsert.c b/src/interfaces/libpgeasy/examples/pginsert.c index 7cb2cf5b26..5fa96bf474 100644 --- a/src/interfaces/libpgeasy/examples/pginsert.c +++ b/src/interfaces/libpgeasy/examples/pginsert.c @@ -6,8 +6,8 @@ #include #include #include -#include "halt.h" -#include "pgeasy.h" +#include "../halt.h" +#include "libpgeasy.h" int main(int argc, char **argv) diff --git a/src/interfaces/libpgeasy/examples/pgnulltest.c b/src/interfaces/libpgeasy/examples/pgnulltest.c index 4651d77bac..f54a3f5916 100644 --- a/src/interfaces/libpgeasy/examples/pgnulltest.c +++ b/src/interfaces/libpgeasy/examples/pgnulltest.c @@ -7,9 +7,9 @@ #include #include -#include #include -#include +#include "../halt.h" +#include "libpgeasy.h" int main(int argc, char **argv) diff --git a/src/interfaces/libpgeasy/examples/pgwordcount.c b/src/interfaces/libpgeasy/examples/pgwordcount.c index 4715f88f43..c5705e87fa 100644 --- a/src/interfaces/libpgeasy/examples/pgwordcount.c +++ b/src/interfaces/libpgeasy/examples/pgwordcount.c @@ -4,9 +4,9 @@ */ #include -#include "halt.h" #include -#include "pgeasy.h" +#include "../halt.h" +#include "libpgeasy.h" int main(int argc, char **argv) diff --git a/src/interfaces/libpgeasy/halt.c b/src/interfaces/libpgeasy/halt.c index f56385898f..9d9796a6cb 100644 --- a/src/interfaces/libpgeasy/halt.c +++ b/src/interfaces/libpgeasy/halt.c @@ -5,13 +5,13 @@ ** This is used to print out error messages and exit */ -#include +#include #include #include #include #include #include - +#include "halt.h" /*------------------------------------------------------------------------- ** @@ -19,18 +19,14 @@ ** **------------------------------------------------------------------------*/ -/*VARARGS*/ void -halt(va_alist) -va_dcl +halt(char *format, ...) { va_list arg_ptr; - char *format, - *pstr; + char *pstr; void (*sig_func) (); - va_start(arg_ptr); - format = va_arg(arg_ptr, char *); + va_start(arg_ptr, format); if (strncmp(format, "PERROR", 6) != 0) vfprintf(stderr, format, arg_ptr); else diff --git a/src/interfaces/libpgeasy/halt.h b/src/interfaces/libpgeasy/halt.h index 8d83ede83a..69835a1479 100644 --- a/src/interfaces/libpgeasy/halt.h +++ b/src/interfaces/libpgeasy/halt.h @@ -3,4 +3,4 @@ ** */ -void halt(); +void halt(char *format,...); diff --git a/src/interfaces/libpgeasy/pgeasy.3 b/src/interfaces/libpgeasy/pgeasy.3 deleted file mode 100644 index 34b6e9f1b6..0000000000 --- a/src/interfaces/libpgeasy/pgeasy.3 +++ /dev/null @@ -1,71 +0,0 @@ -.\" This is -*-nroff-*- -.\" XXX standard disclaimer belongs here.... -.\" $Header: /cvsroot/pgsql/src/interfaces/libpgeasy/Attic/pgeasy.3,v 1.1 1999/10/11 18:03:00 momjian Exp $ -.TH PGEASY INTRO 08/08/98 PostgreSQL PostgreSQL -.SH DESCRIPTION -Pgeasy allows you to cleanly interface to the libpq library, -more like a 4gl SQL interface. -.PP -It consists of set of simplified C functions that encapsulate the -functionality of libpq. -The functions are: - -.nf -PGresult *doquery(char *query); -PGconn *connectdb(); -void disconnectdb(); - -int fetch(void *param,...); -int fetchwithnulls(void *param,...); -void reset_fetch(); - -void on_error_continue(); -void on_error_stop(); - -PGresult *get_result(); -void set_result(PGresult *newres); -void unset_result(PGresult *oldres); -.fi -.PP -Many functions return a structure or value, so you can do more work -with the result if required. -.PP -You basically connect to the database with -.BR connectdb , -issue your query with -.BR doquery , -fetch the results with -.BR fetch , -and finish with -.BR disconnectdb . -.PP -For -.IR select -queries, -.BR fetch -allows you to pass pointers as parameters, and on return the variables -are filled with data from the binary cursor you opened. These binary -cursors can not be used if you are running the -.BR pgeasy -client on a system with a different architecture than the database -server. If you pass a NULL pointer parameter, the column is skipped. -.BR fetchwithnulls -allows you to retieve the -.IR null -status of the field by passing an -.IR int* -after each result pointer, which returns true or false if the field is null. -You can always use libpq functions on the PGresult pointer returned by -.BR doquery . -.BR reset_fetch -starts the fetch back at the beginning. -.PP -.BR get_result , -.BR set_result , -and -.BR unset_result -allow you to handle multiple result sets at the same time. -.PP -There are a variety of demonstration programs in the -.BR pgeasy -source directory. diff --git a/src/interfaces/libpgeasy/pgeasy.c b/src/interfaces/libpgeasy/pgeasy.c deleted file mode 100644 index f3d6aae01e..0000000000 --- a/src/interfaces/libpgeasy/pgeasy.c +++ /dev/null @@ -1,287 +0,0 @@ -/* - * pgeasy.c - * -*/ - -#include -#include -#include - -#include -#include "halt.h" -#include "pgeasy.h" - -#define NUL '\0' - -#ifndef TRUE -#define TRUE 1 -#endif - -#ifndef FALSE -#define FALSE 0 -#endif - -/* GLOBAL VARIABLES */ -static PGconn *conn; -static PGresult *res = NULL; - -#define ON_ERROR_STOP 0 -#define ON_ERROR_CONTINUE 1 - -static int on_error_state = ON_ERROR_STOP; - -static in_result_block = FALSE; -static was_get_unset_result = FALSE; - -/* LOCAL VARIABLES */ -static int tuple; - -/* -** -** connectdb - returns PGconn structure -** -*/ -PGconn * -connectdb(char *dbName, - char *pghost, - char *pgport, - char *pgoptions, - char *pgtty) -{ - /* make a connection to the database */ - conn = PQsetdb(pghost, pgport, pgoptions, pgtty, dbName); - if (PQstatus(conn) == CONNECTION_BAD) - halt("Connection to database '%s' failed.\n%s\n", dbName, - PQerrorMessage(conn)); - return conn; -} - -/* -** -** disconnectdb -** -*/ -void -disconnectdb() -{ - PQfinish(conn); -} - -/* -** -** doquery - returns PGresult structure -** -*/ -PGresult * -doquery(char *query) -{ - if (res != NULL && in_result_block == FALSE && was_get_unset_result == FALSE) - PQclear(res); - - was_get_unset_result = FALSE; - res = PQexec(conn, query); - - if (on_error_state == ON_ERROR_STOP && - (res == NULL || - PQresultStatus(res) == PGRES_BAD_RESPONSE || - PQresultStatus(res) == PGRES_NONFATAL_ERROR || - PQresultStatus(res) == PGRES_FATAL_ERROR)) - { - if (res != NULL) - fprintf(stderr, "query error: %s\n", PQcmdStatus(res)); - else - fprintf(stderr, "connection error: %s\n", PQerrorMessage(conn)); - PQfinish(conn); - halt("failed request: %s\n", query); - } - tuple = 0; - return res; -} - -/* -** -** fetch - returns tuple number (starts at 0), or the value END_OF_TUPLES -** NULL pointers are skipped -** -*/ -int -fetch(void *param,...) -{ - va_list ap; - int arg, - num_fields; - - num_fields = PQnfields(res); - - if (tuple >= PQntuples(res)) - return END_OF_TUPLES; - - va_start(ap, param); - for (arg = 0; arg < num_fields; arg++) - { - if (param != NULL) - { - if (PQfsize(res, arg) == -1) - { - memcpy(param, PQgetvalue(res, tuple, arg), PQgetlength(res, tuple, arg)); - ((char *) param)[PQgetlength(res, tuple, arg)] = NUL; - } - else - memcpy(param, PQgetvalue(res, tuple, arg), PQfsize(res, arg)); - } - param = va_arg(ap, char *); - } - va_end(ap); - return tuple++; -} - -/* -** -** fetchwithnulls - returns tuple number (starts at 0), -** or the value END_OF_TUPLES -** Returns TRUE or FALSE into null indicator variables -** NULL pointers are skipped -*/ -int -fetchwithnulls(void *param,...) -{ - va_list ap; - int arg, - num_fields; - - num_fields = PQnfields(res); - - if (tuple >= PQntuples(res)) - return END_OF_TUPLES; - - va_start(ap, param); - for (arg = 0; arg < num_fields; arg++) - { - if (param != NULL) - { - if (PQfsize(res, arg) == -1) - { - memcpy(param, PQgetvalue(res, tuple, arg), PQgetlength(res, tuple, arg)); - ((char *) param)[PQgetlength(res, tuple, arg)] = NUL; - } - else - memcpy(param, PQgetvalue(res, tuple, arg), PQfsize(res, arg)); - } - param = va_arg(ap, char *); - if (PQgetisnull(res, tuple, arg) != 0) - *(int *) param = 1; - else - *(int *) param = 0; - param = va_arg(ap, char *); - } - va_end(ap); - return tuple++; -} - -/* -** -** on_error_stop -** -*/ -void -on_error_stop() -{ - on_error_state = ON_ERROR_STOP; -} - -/* -** -** on_error_continue -** -*/ -void -on_error_continue() -{ - on_error_state = ON_ERROR_CONTINUE; -} - - -/* -** -** get_result -** -*/ -PGresult * -get_result() -{ - char *cmdstatus = PQcmdStatus(res); - - was_get_unset_result = TRUE; - - /* we have to store the fetch location somewhere */ - cmdstatus[0] = NUL; - memcpy(&cmdstatus[1], &tuple, sizeof(tuple)); - - return res; -} - -/* -** -** set_result -** -*/ -void -set_result(PGresult *newres) -{ - - char *cmdstatus = PQcmdStatus(res); - - if (newres == NULL) - halt("set_result called with null result pointer\n"); - - if (res != NULL && was_get_unset_result == FALSE) - if (in_result_block == FALSE) - PQclear(res); - else - { - cmdstatus[0] = NUL; - memcpy(&cmdstatus[1], &tuple, sizeof(tuple)); - } - - in_result_block = TRUE; - was_get_unset_result = FALSE; - - cmdstatus = PQcmdStatus(newres); - memcpy(&tuple, &cmdstatus[1], sizeof(tuple)); - - res = newres; -} - - -/* -** -** unset_result -** -*/ -void -unset_result(PGresult *oldres) -{ - char *cmdstatus = PQcmdStatus(oldres); - - if (oldres == NULL) - halt("unset_result called with null result pointer\n"); - - if (in_result_block == FALSE) - halt("Unset of result without being set.\n"); - - was_get_unset_result = TRUE; - cmdstatus[0] = NUL; - memcpy(&cmdstatus[1], &tuple, sizeof(tuple)); - in_result_block = FALSE; -} - -/* -** -** reset_fetch -** -*/ -void -reset_fetch() -{ - tuple = 0; -} diff --git a/src/interfaces/libpgeasy/pgeasy.h b/src/interfaces/libpgeasy/pgeasy.h deleted file mode 100644 index 11253acebc..0000000000 --- a/src/interfaces/libpgeasy/pgeasy.h +++ /dev/null @@ -1,18 +0,0 @@ -/* - * pglib.h - * -*/ - -PGresult *doquery(char *query); -PGconn *connectdb(); -void disconnectdb(); -int fetch(void *param,...); -int fetchwithnulls(void *param,...); -void on_error_continue(); -void on_error_stop(); -PGresult *get_result(); -void set_result(PGresult *newres); -void unset_result(PGresult *oldres); -void reset_fetch(); - -#define END_OF_TUPLES (-1)