tinycobol/test.code/tdb03/tdb03a.c

99 lines
1.8 KiB
C

/* test program for libpq (postgresql) */
#include <stdio.h>
#include <stdlib.h>
#include <libpq-fe.h>
void
do_exit(PGconn *conn) {
PQfinish(conn);
exit(1);
};
/* this function assumes a command buffer of 80 characters */
void
sql_exec_query( int *dbhandle, char *query, int *qryhandle, int *status ) {
char *r,*s=query;
int nfields, i, j;
PGconn *conn = (PGconn *)*dbhandle;
PGresult *res;
res = PQexec(conn, query);
*status = PQresultStatus(res);
*qryhandle = (int) res;
}
void
sql_status_message( int *dbhandle, char *message ) {
PGconn *conn = (PGconn *)*dbhandle;
char *s;
s = PQerrorMessage(conn);
while (*s) {
*message++ = *s++;
}
}
void
sql_max_tuple( int *qryhandle, int *maxtuple ) {
*maxtuple = PQntuples((PGresult *)*qryhandle);
}
void
sql_max_field( int *qryhandle, int *maxfield ) {
*maxfield = PQnfields((PGresult *)*qryhandle);
}
void
sql_get_value( int *qryhandle, int *ntuple, int *nfield, char *value ) {
char *s;
s = PQgetvalue((PGresult *)*qryhandle,*ntuple,*nfield);
while (*s) {
if (*s == '\n') continue;
*value++ = *s++;
}
}
void
sql_get_tuple( int *qryhandle, int *ntuple, char *tuple ) {
char *s;
int nfield=0;
int maxfield = PQnfields((PGresult *)*qryhandle);
while (nfield < maxfield) {
s = PQgetvalue((PGresult *)*qryhandle,*ntuple,nfield);
while (*s) {
*tuple++ = *s++;
}
nfield++;
}
}
void
sql_clear_query( int *qryhandle ) {
PQclear((PGresult *)*qryhandle);
}
void
sql_connect_db( char *dbname, int *dbhandle, int *status ) {
PGconn *conn;
char db[81];
char *s;
/* trim right spaces on the buffer */
memmove(db,dbname,80);
db[80]=0;
s = db+79;
while ((s >= db) && (*s == ' ')) s--;
if (s >= db)
*(s+1)=0;
conn = PQsetdb("","","","",db);
*status = PQstatus(conn);
*dbhandle = (int)conn;
}
void
sql_disconnect_db( int *dbhandle ) {
PGconn *conn = (PGconn *)*dbhandle;
PQfinish(conn);
}