Alot of "changes" from Dr. George's source tree...
Most of the changes in here look to b epurely cosmetic, and don't affect anything... ...and some stuff is completely questionable...in that I may have reversed some of the stuf fwe already had :(
This commit is contained in:
parent
94e5642b87
commit
2206b5819d
|
@ -7,7 +7,7 @@
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-auth.c,v 1.1.1.1 1996/07/09 06:22:17 scrappy Exp $
|
* $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-auth.c,v 1.2 1996/07/23 03:35:11 scrappy Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
@ -524,7 +524,7 @@ fe_getauthname(char* PQerrormsg)
|
||||||
#endif
|
#endif
|
||||||
case STARTUP_MSG:
|
case STARTUP_MSG:
|
||||||
{
|
{
|
||||||
struct passwd *pw = getpwuid(getuid());
|
struct passwd *pw = getpwuid(geteuid());
|
||||||
if (pw &&
|
if (pw &&
|
||||||
pw->pw_name &&
|
pw->pw_name &&
|
||||||
(name = (char *) malloc(strlen(pw->pw_name) + 1))) {
|
(name = (char *) malloc(strlen(pw->pw_name) + 1))) {
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-connect.c,v 1.3 1996/07/19 07:00:56 scrappy Exp $
|
* $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-connect.c,v 1.4 1996/07/23 03:35:12 scrappy Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
@ -70,12 +70,12 @@ PQsetdb(char *pghost, char* pgport, char* pgoptions, char* pgtty, char* dbName)
|
||||||
char *tmp;
|
char *tmp;
|
||||||
|
|
||||||
conn = (PGconn*)malloc(sizeof(PGconn));
|
conn = (PGconn*)malloc(sizeof(PGconn));
|
||||||
|
|
||||||
if (!conn) {
|
if (!conn) {
|
||||||
fprintf(stderr,"FATAL: pqsetdb() -- unable to allocate memory for a PGconn");
|
fprintf(stderr,"FATAL: PQsetdb() -- unable to allocate memory for a PGconn");
|
||||||
return (PGconn*)NULL;
|
return (PGconn*)NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
conn->Pfout = NULL;
|
conn->Pfout = NULL;
|
||||||
conn->Pfin = NULL;
|
conn->Pfin = NULL;
|
||||||
conn->Pfdebug = NULL;
|
conn->Pfdebug = NULL;
|
||||||
|
@ -90,7 +90,7 @@ PQsetdb(char *pghost, char* pgport, char* pgoptions, char* pgtty, char* dbName)
|
||||||
} else
|
} else
|
||||||
conn->pghost = strdup(pghost);
|
conn->pghost = strdup(pghost);
|
||||||
|
|
||||||
if (!pgport || pgport == '\0') {
|
if (!pgport || pgport[0] == '\0') {
|
||||||
if (!(tmp = getenv("PGPORT"))) {
|
if (!(tmp = getenv("PGPORT"))) {
|
||||||
tmp = POSTPORT;
|
tmp = POSTPORT;
|
||||||
}
|
}
|
||||||
|
@ -98,7 +98,7 @@ PQsetdb(char *pghost, char* pgport, char* pgoptions, char* pgtty, char* dbName)
|
||||||
} else
|
} else
|
||||||
conn->pgport = strdup(pgport);
|
conn->pgport = strdup(pgport);
|
||||||
|
|
||||||
if (!pgtty || pgtty == '\0') {
|
if (!pgtty || pgtty[0] == '\0') {
|
||||||
if (!(tmp = getenv("PGTTY"))) {
|
if (!(tmp = getenv("PGTTY"))) {
|
||||||
tmp = DefaultTty;
|
tmp = DefaultTty;
|
||||||
}
|
}
|
||||||
|
@ -106,29 +106,42 @@ PQsetdb(char *pghost, char* pgport, char* pgoptions, char* pgtty, char* dbName)
|
||||||
} else
|
} else
|
||||||
conn->pgtty = strdup(pgtty);
|
conn->pgtty = strdup(pgtty);
|
||||||
|
|
||||||
if (!pgoptions || pgoptions == '\0') {
|
if (!pgoptions || pgoptions[0] == '\0') {
|
||||||
if (!(tmp = getenv("PGOPTIONS"))) {
|
if (!(tmp = getenv("PGOPTIONS"))) {
|
||||||
tmp = DefaultOption;
|
tmp = DefaultOption;
|
||||||
}
|
}
|
||||||
conn->pgoptions = strdup(tmp);
|
conn->pgoptions = strdup(tmp);
|
||||||
} else
|
} else
|
||||||
conn->pgoptions = strdup(pgoptions);
|
conn->pgoptions = strdup(pgoptions);
|
||||||
|
#if 0
|
||||||
if (((tmp = dbName) && (dbName[0] != '\0')) ||
|
if (!dbName || dbName[0] == '\0') {
|
||||||
((tmp = getenv("PGDATABASE"))))
|
char errorMessage[ERROR_MSG_LENGTH];
|
||||||
|
if (!(tmp = getenv("PGDATABASE")) &&
|
||||||
|
!(tmp = fe_getauthname(errorMessage))) {
|
||||||
|
sprintf(conn->errorMessage,
|
||||||
|
"FATAL: PQsetdb: Unable to determine a database name!\n");
|
||||||
|
/* pqdebug("%s", conn->errorMessage); */
|
||||||
|
conn->dbName = NULL;
|
||||||
|
return conn;
|
||||||
|
}
|
||||||
conn->dbName = strdup(tmp);
|
conn->dbName = strdup(tmp);
|
||||||
else {
|
} else
|
||||||
|
conn->dbName = strdup(dbName);
|
||||||
|
#endif
|
||||||
|
if (((tmp = dbName) && (dbName[0] != '\0')) ||
|
||||||
|
((tmp = getenv("PGDATABASE")))) {
|
||||||
|
conn->dbName = strdup(tmp);
|
||||||
|
} else {
|
||||||
char errorMessage[ERROR_MSG_LENGTH];
|
char errorMessage[ERROR_MSG_LENGTH];
|
||||||
if (tmp = fe_getauthname(errorMessage)) {
|
if (tmp = fe_getauthname(errorMessage)) {
|
||||||
conn->dbName = strdup(tmp);
|
conn->dbName = strdup(tmp);
|
||||||
free(tmp);
|
free(tmp);
|
||||||
}
|
} else {
|
||||||
else {
|
sprintf(conn->errorMessage,
|
||||||
sprintf(conn->errorMessage,
|
"FATAL: PQsetdb: Unable to determine a database name!\n");
|
||||||
"FATAL: PQsetdb: Unable to determine a database name!\n");
|
/* pqdebug("%s", conn->errorMessage); */
|
||||||
/* pqdebug("%s", conn->errorMessage); */
|
conn->dbName = NULL;
|
||||||
conn->dbName = NULL;
|
return conn;
|
||||||
return conn;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
conn->status = connectDB(conn);
|
conn->status = connectDB(conn);
|
||||||
|
@ -320,7 +333,7 @@ PQfinish(PGconn *conn)
|
||||||
fprintf(stderr,"PQfinish() -- pointer to PGconn is null");
|
fprintf(stderr,"PQfinish() -- pointer to PGconn is null");
|
||||||
} else {
|
} else {
|
||||||
if (conn->status == CONNECTION_OK)
|
if (conn->status == CONNECTION_OK)
|
||||||
closePGconn(conn);
|
closePGconn(conn);
|
||||||
freePGconn(conn);
|
freePGconn(conn);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -404,10 +417,8 @@ startup2PacketBuf(StartupInfo* s, PacketBuf* res)
|
||||||
strncpy(tmp, s->execFile, sizeof(s->execFile));
|
strncpy(tmp, s->execFile, sizeof(s->execFile));
|
||||||
tmp += sizeof(s->execFile);
|
tmp += sizeof(s->execFile);
|
||||||
strncpy(tmp, s->tty, sizeof(s->execFile));
|
strncpy(tmp, s->tty, sizeof(s->execFile));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* =========== accessor functions for PGconn ========= */
|
/* =========== accessor functions for PGconn ========= */
|
||||||
char*
|
char*
|
||||||
PQdb(PGconn* conn)
|
PQdb(PGconn* conn)
|
||||||
|
@ -416,7 +427,6 @@ PQdb(PGconn* conn)
|
||||||
fprintf(stderr,"PQdb() -- pointer to PGconn is null");
|
fprintf(stderr,"PQdb() -- pointer to PGconn is null");
|
||||||
return (char *)NULL;
|
return (char *)NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
return conn->dbName;
|
return conn->dbName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -438,7 +448,6 @@ PQoptions(PGconn* conn)
|
||||||
fprintf(stderr,"PQoptions() -- pointer to PGconn is null");
|
fprintf(stderr,"PQoptions() -- pointer to PGconn is null");
|
||||||
return (char *)NULL;
|
return (char *)NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
return conn->pgoptions;
|
return conn->pgoptions;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -449,7 +458,6 @@ PQtty(PGconn* conn)
|
||||||
fprintf(stderr,"PQtty() -- pointer to PGconn is null");
|
fprintf(stderr,"PQtty() -- pointer to PGconn is null");
|
||||||
return (char *)NULL;
|
return (char *)NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
return conn->pgtty;
|
return conn->pgtty;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -460,7 +468,6 @@ PQport(PGconn* conn)
|
||||||
fprintf(stderr,"PQport() -- pointer to PGconn is null");
|
fprintf(stderr,"PQport() -- pointer to PGconn is null");
|
||||||
return (char *)NULL;
|
return (char *)NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
return conn->pgport;
|
return conn->pgport;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -471,7 +478,6 @@ PQstatus(PGconn* conn)
|
||||||
fprintf(stderr,"PQstatus() -- pointer to PGconn is null");
|
fprintf(stderr,"PQstatus() -- pointer to PGconn is null");
|
||||||
return CONNECTION_BAD;
|
return CONNECTION_BAD;
|
||||||
}
|
}
|
||||||
|
|
||||||
return conn->status;
|
return conn->status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -482,7 +488,6 @@ PQerrorMessage(PGconn* conn)
|
||||||
fprintf(stderr,"PQerrorMessage() -- pointer to PGconn is null");
|
fprintf(stderr,"PQerrorMessage() -- pointer to PGconn is null");
|
||||||
return (char *)NULL;
|
return (char *)NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
return conn->errorMessage;
|
return conn->errorMessage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -7,18 +7,19 @@
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-exec.c,v 1.4 1996/07/19 06:36:38 scrappy Exp $
|
* $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-exec.c,v 1.5 1996/07/23 03:35:13 scrappy Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <unistd.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <signal.h>
|
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include "postgres.h"
|
#include "postgres.h"
|
||||||
#include "libpq/pqcomm.h"
|
#include "libpq/pqcomm.h"
|
||||||
#include "libpq-fe.h"
|
#include "libpq-fe.h"
|
||||||
|
#include <signal.h>
|
||||||
|
|
||||||
/* the tuples array in a PGresGroup has to grow to accommodate the tuples */
|
/* the tuples array in a PGresGroup has to grow to accommodate the tuples */
|
||||||
/* returned. Each time, we grow by this much: */
|
/* returned. Each time, we grow by this much: */
|
||||||
|
@ -39,6 +40,7 @@ static PGresult* makePGresult(PGconn *conn, char *pname);
|
||||||
static void addTuple(PGresult *res, PGresAttValue *tup);
|
static void addTuple(PGresult *res, PGresAttValue *tup);
|
||||||
static PGresAttValue* getTuple(PGconn *conn, PGresult *res, int binary);
|
static PGresAttValue* getTuple(PGconn *conn, PGresult *res, int binary);
|
||||||
static PGresult* makeEmptyPGresult(PGconn *conn, ExecStatusType status);
|
static PGresult* makeEmptyPGresult(PGconn *conn, ExecStatusType status);
|
||||||
|
static void fill(int length, int max, char filler, FILE *fp);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* PQclear -
|
* PQclear -
|
||||||
|
@ -623,13 +625,143 @@ PQendcopy(PGconn *conn)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* simply send out max-length number of filler characters to fp */
|
||||||
|
static void
|
||||||
|
fill (int length, int max, char filler, FILE *fp)
|
||||||
|
{
|
||||||
|
int count;
|
||||||
|
char filltmp[2];
|
||||||
|
|
||||||
|
filltmp[0] = filler;
|
||||||
|
filltmp[1] = 0;
|
||||||
|
count = max - length;
|
||||||
|
while (count-- >= 0)
|
||||||
|
{
|
||||||
|
fprintf(fp, "%s", filltmp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* print_tuples()
|
* PQdisplayTuples()
|
||||||
|
*
|
||||||
|
* a better version of PQprintTuples()
|
||||||
|
* that can optionally do padding of fields with spaces and use different
|
||||||
|
* field separators
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
PQdisplayTuples(PGresult *res,
|
||||||
|
FILE *fp, /* where to send the output */
|
||||||
|
int fillAlign, /* pad the fields with spaces */
|
||||||
|
char *fieldSep, /* field separator */
|
||||||
|
int printHeader, /* display headers? */
|
||||||
|
int quiet
|
||||||
|
)
|
||||||
|
{
|
||||||
|
#define DEFAULT_FIELD_SEP " "
|
||||||
|
|
||||||
|
char *pager;
|
||||||
|
int i, j;
|
||||||
|
int nFields;
|
||||||
|
int nTuples;
|
||||||
|
int fLength[MAX_FIELDS];
|
||||||
|
int usePipe = 0;
|
||||||
|
int total_line_length = 0;
|
||||||
|
|
||||||
|
if (fieldSep == NULL)
|
||||||
|
fieldSep == DEFAULT_FIELD_SEP;
|
||||||
|
|
||||||
|
/* Get some useful info about the results */
|
||||||
|
nFields = PQnfields(res);
|
||||||
|
nTuples = PQntuples(res);
|
||||||
|
|
||||||
|
if (fp == NULL)
|
||||||
|
fp = stdout;
|
||||||
|
|
||||||
|
/* Zero the initial field lengths */
|
||||||
|
for (j=0 ; j < nFields; j++) {
|
||||||
|
fLength[j] = strlen(PQfname(res,j));
|
||||||
|
}
|
||||||
|
/* Find the max length of each field in the result */
|
||||||
|
/* will be somewhat time consuming for very large results */
|
||||||
|
if (fillAlign) {
|
||||||
|
for (i=0; i < nTuples; i++) {
|
||||||
|
for (j=0 ; j < nFields; j++) {
|
||||||
|
if (PQgetlength(res,i,j) > fLength[j])
|
||||||
|
fLength[j] = PQgetlength(res,i,j);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (j=0 ; j < nFields; j++)
|
||||||
|
total_line_length += fLength[j];
|
||||||
|
total_line_length += nFields * strlen(fieldSep) + 2; /* delimiters */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Use the pager only if the number of tuples is big enough */
|
||||||
|
pager=getenv("PAGER");
|
||||||
|
if ((nTuples > 20)
|
||||||
|
&& (fp == stdout)
|
||||||
|
&& (pager != NULL)
|
||||||
|
&& isatty(fileno(stdout))
|
||||||
|
&& (nTuples * (total_line_length / 80 + 1) >= 24
|
||||||
|
- (printHeader != 0) * (total_line_length / 80 + 1) * 2
|
||||||
|
- 1 /* newline at end of tuple list */ - (quiet == 0))) {
|
||||||
|
fp = popen(pager, "w");
|
||||||
|
if (fp) {
|
||||||
|
usePipe = 1;
|
||||||
|
signal(SIGPIPE, SIG_IGN);
|
||||||
|
} else {
|
||||||
|
fp = stdout;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (printHeader) {
|
||||||
|
/* first, print out the attribute names */
|
||||||
|
for (i=0; i < nFields; i++) {
|
||||||
|
fputs(PQfname(res,i), fp);
|
||||||
|
if (fillAlign)
|
||||||
|
fill (strlen (PQfname(res,i)), fLength[i], ' ', fp);
|
||||||
|
fputs(fieldSep,fp);
|
||||||
|
}
|
||||||
|
fprintf(fp, "\n");
|
||||||
|
|
||||||
|
/* Underline the attribute names */
|
||||||
|
for (i=0; i < nFields; i++) {
|
||||||
|
if (fillAlign)
|
||||||
|
fill (0, fLength[i], '-', fp);
|
||||||
|
fputs(fieldSep,fp);
|
||||||
|
}
|
||||||
|
fprintf(fp, "\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
/* next, print out the instances */
|
||||||
|
for (i=0; i < nTuples; i++) {
|
||||||
|
for (j=0 ; j < nFields; j++) {
|
||||||
|
fprintf(fp, "%s", PQgetvalue(res,i,j));
|
||||||
|
if (fillAlign)
|
||||||
|
fill (strlen (PQgetvalue(res,i,j)), fLength[j], ' ', fp);
|
||||||
|
fputs(fieldSep,fp);
|
||||||
|
}
|
||||||
|
fprintf(fp, "\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!quiet)
|
||||||
|
fprintf (fp, "\nQuery returned %d row%s.\n",PQntuples(res),
|
||||||
|
(PQntuples(res) == 1) ? "" : "s");
|
||||||
|
|
||||||
|
fflush(fp);
|
||||||
|
if (usePipe) {
|
||||||
|
pclose(fp);
|
||||||
|
signal(SIGPIPE, SIG_DFL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* PQprintTuples()
|
||||||
*
|
*
|
||||||
* This is the routine that prints out the tuples that
|
* This is the routine that prints out the tuples that
|
||||||
* are returned from the backend.
|
* are returned from the backend.
|
||||||
* Right now all columns are of fixed length,
|
* Right now all columns are of fixed length,
|
||||||
* this should be changed to allow wrap around for
|
* this should be changed to allow wrap around for
|
||||||
* tuples values that are wider.
|
* tuples values that are wider.
|
||||||
|
@ -728,10 +860,6 @@ PQprint(FILE *fout,
|
||||||
char *border=NULL;
|
char *border=NULL;
|
||||||
int numFieldName;
|
int numFieldName;
|
||||||
int fs_len=strlen(po->fieldSep);
|
int fs_len=strlen(po->fieldSep);
|
||||||
int total_line_length = 0;
|
|
||||||
int usePipe = 0;
|
|
||||||
char *pager;
|
|
||||||
|
|
||||||
nTups = PQntuples(res);
|
nTups = PQntuples(res);
|
||||||
if (!(fieldNames=(char **)calloc(nFields, sizeof (char *))))
|
if (!(fieldNames=(char **)calloc(nFields, sizeof (char *))))
|
||||||
{
|
{
|
||||||
|
@ -763,37 +891,7 @@ PQprint(FILE *fout,
|
||||||
len+=fs_len;
|
len+=fs_len;
|
||||||
if (len>fieldMaxLen)
|
if (len>fieldMaxLen)
|
||||||
fieldMaxLen=len;
|
fieldMaxLen=len;
|
||||||
total_line_length += len;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
total_line_length += nFields * strlen(po->fieldSep) + 1;
|
|
||||||
|
|
||||||
if (fout == NULL)
|
|
||||||
fout = stdout;
|
|
||||||
if (fout == stdout) {
|
|
||||||
/* try to pipe to the pager program if possible */
|
|
||||||
pager=getenv("PAGER");
|
|
||||||
if (pager != NULL &&
|
|
||||||
isatty(fileno(stdout)) &&
|
|
||||||
!po->html3 &&
|
|
||||||
((po->expanded && nTups * (nFields+1) >= 24) ||
|
|
||||||
(!po->expanded && nTups * (total_line_length / 80 + 1) *
|
|
||||||
( 1 + (po->standard != 0)) >=
|
|
||||||
24 -
|
|
||||||
(po->header != 0) * (total_line_length / 80 + 1) * 2
|
|
||||||
/* - 1 */ /* newline at end of tuple list */
|
|
||||||
/* - (quiet == 0)
|
|
||||||
*/ )))
|
|
||||||
{
|
|
||||||
fout = popen(pager, "w");
|
|
||||||
if (fout) {
|
|
||||||
usePipe = 1;
|
|
||||||
signal(SIGPIPE, SIG_IGN);
|
|
||||||
} else
|
|
||||||
fout = stdout;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!po->expanded && (po->align || po->html3))
|
if (!po->expanded && (po->align || po->html3))
|
||||||
{
|
{
|
||||||
if (!(fields=(char **)calloc(nFields*(nTups+1), sizeof(char *))))
|
if (!(fields=(char **)calloc(nFields*(nTups+1), sizeof(char *))))
|
||||||
|
@ -1012,10 +1110,6 @@ efield:
|
||||||
fputc('\n', fout);
|
fputc('\n', fout);
|
||||||
}
|
}
|
||||||
free(fields);
|
free(fields);
|
||||||
if (usePipe) {
|
|
||||||
pclose(fout);
|
|
||||||
signal(SIGPIPE, SIG_DFL);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
free(fieldMax);
|
free(fieldMax);
|
||||||
free(fieldNotNum);
|
free(fieldNotNum);
|
||||||
|
@ -1135,17 +1229,14 @@ PQfn(PGconn *conn,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* ====== accessor funcs for PGresult ======== */
|
/* ====== accessor funcs for PGresult ======== */
|
||||||
|
|
||||||
ExecStatusType
|
ExecStatusType
|
||||||
PQresultStatus(PGresult* res)
|
PQresultStatus(PGresult* res)
|
||||||
{
|
{
|
||||||
if (!res) {
|
if (!res) {
|
||||||
fprintf(stderr, "PQresultStatus() -- pointer to PQresult is null");
|
fprintf(stderr, "PQresultStatus() -- pointer to PQresult is null");
|
||||||
return PGRES_NONFATAL_ERROR;
|
return PGRES_NONFATAL_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
return res->resultStatus;
|
return res->resultStatus;
|
||||||
|
@ -1154,22 +1245,20 @@ PQresultStatus(PGresult* res)
|
||||||
int
|
int
|
||||||
PQntuples(PGresult *res)
|
PQntuples(PGresult *res)
|
||||||
{
|
{
|
||||||
if (!res) {
|
if (!res) {
|
||||||
fprintf(stderr, "PQntuples() -- pointer to PQresult is null");
|
fprintf(stderr, "PQntuples() -- pointer to PQresult is null");
|
||||||
return (int)NULL;
|
return (int)NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
return res->ntups;
|
return res->ntups;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
PQnfields(PGresult *res)
|
PQnfields(PGresult *res)
|
||||||
{
|
{
|
||||||
if (!res) {
|
if (!res) {
|
||||||
fprintf(stderr, "PQnfields() -- pointer to PQresult is null");
|
fprintf(stderr, "PQnfields() -- pointer to PQresult is null");
|
||||||
return (int)NULL;
|
return (int)NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
return res->numAttributes;
|
return res->numAttributes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1179,10 +1268,9 @@ PQnfields(PGresult *res)
|
||||||
char*
|
char*
|
||||||
PQfname(PGresult *res, int field_num)
|
PQfname(PGresult *res, int field_num)
|
||||||
{
|
{
|
||||||
|
if (!res) {
|
||||||
if (!res) {
|
fprintf(stderr, "PQfname() -- pointer to PQresult is null");
|
||||||
fprintf(stderr, "PQfname() -- pointer to PQresult is null");
|
return NULL;
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (field_num > (res->numAttributes - 1)) {
|
if (field_num > (res->numAttributes - 1)) {
|
||||||
|
@ -1205,7 +1293,7 @@ PQfnumber(PGresult *res, char* field_name)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if (!res) {
|
if (!res) {
|
||||||
fprintf(stderr, "PQfnumber() -- pointer to PQresult is null");
|
fprintf(stderr, "PQfnumber() -- pointer to PQresult is null");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -1226,9 +1314,9 @@ PQfnumber(PGresult *res, char* field_name)
|
||||||
Oid
|
Oid
|
||||||
PQftype(PGresult *res, int field_num)
|
PQftype(PGresult *res, int field_num)
|
||||||
{
|
{
|
||||||
if (!res) {
|
if (!res) {
|
||||||
fprintf(stderr, "PQftype() -- pointer to PQresult is null");
|
fprintf(stderr, "PQftype() -- pointer to PQresult is null");
|
||||||
return InvalidOid;
|
return InvalidOid;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (field_num > (res->numAttributes - 1)) {
|
if (field_num > (res->numAttributes - 1)) {
|
||||||
|
@ -1245,9 +1333,9 @@ PQftype(PGresult *res, int field_num)
|
||||||
int2
|
int2
|
||||||
PQfsize(PGresult *res, int field_num)
|
PQfsize(PGresult *res, int field_num)
|
||||||
{
|
{
|
||||||
if (!res) {
|
if (!res) {
|
||||||
fprintf(stderr, "PQfsize() -- pointer to PQresult is null");
|
fprintf(stderr, "PQfsize() -- pointer to PQresult is null");
|
||||||
return (int2)NULL;
|
return (int2)NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (field_num > (res->numAttributes - 1)) {
|
if (field_num > (res->numAttributes - 1)) {
|
||||||
|
@ -1262,11 +1350,10 @@ PQfsize(PGresult *res, int field_num)
|
||||||
}
|
}
|
||||||
|
|
||||||
char* PQcmdStatus(PGresult *res) {
|
char* PQcmdStatus(PGresult *res) {
|
||||||
if (!res) {
|
if (!res) {
|
||||||
fprintf(stderr, "PQcmdStatus() -- pointer to PQresult is null");
|
fprintf(stderr, "PQcmdStatus() -- pointer to PQresult is null");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
return res->cmdStatus;
|
return res->cmdStatus;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1304,18 +1391,17 @@ char* PQoidStatus(PGresult *res) {
|
||||||
char*
|
char*
|
||||||
PQgetvalue(PGresult *res, int tup_num, int field_num)
|
PQgetvalue(PGresult *res, int tup_num, int field_num)
|
||||||
{
|
{
|
||||||
if (!res) {
|
if (!res) {
|
||||||
fprintf(stderr, "PQgetvalue() -- pointer to PQresult is null");
|
fprintf(stderr, "PQgetvalue() -- pointer to PQresult is null");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tup_num > (res->ntups - 1) ||
|
if (tup_num > (res->ntups - 1) ||
|
||||||
field_num > (res->numAttributes - 1)) {
|
field_num > (res->numAttributes - 1)) {
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"PQgetvalue: ERROR! field %d(of %d) of tuple %d(of %d) is not available",
|
"PQgetvalue: ERROR! field %d(of %d) of tuple %d(of %d) is not available",
|
||||||
field_num, res->numAttributes - 1, tup_num, res->ntups);
|
field_num, res->numAttributes - 1, tup_num, res->ntups);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
return res->tuples[tup_num][field_num].value;
|
return res->tuples[tup_num][field_num].value;
|
||||||
}
|
}
|
||||||
|
@ -1328,8 +1414,8 @@ PQgetvalue(PGresult *res, int tup_num, int field_num)
|
||||||
int
|
int
|
||||||
PQgetlength(PGresult *res, int tup_num, int field_num)
|
PQgetlength(PGresult *res, int tup_num, int field_num)
|
||||||
{
|
{
|
||||||
if (!res) {
|
if (!res) {
|
||||||
fprintf(stderr, "PQgetlength() -- pointer to PQresult is null");
|
fprintf(stderr, "PQgetlength() -- pointer to PQresult is null");
|
||||||
return (int)NULL;
|
return (int)NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
*
|
*
|
||||||
* Copyright (c) 1994, Regents of the University of California
|
* Copyright (c) 1994, Regents of the University of California
|
||||||
*
|
*
|
||||||
* $Id: libpq-fe.h,v 1.2 1996/07/18 05:48:57 scrappy Exp $
|
* $Id: libpq-fe.h,v 1.3 1996/07/23 03:35:14 scrappy Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
@ -127,17 +127,19 @@ typedef struct pg_result{
|
||||||
PGconn* conn;
|
PGconn* conn;
|
||||||
} PGresult;
|
} PGresult;
|
||||||
|
|
||||||
typedef struct _PQprintOpt {
|
struct _PQprintOpt {
|
||||||
bool header; /* print output field headers or not */
|
bool header; /* print output field headers or not */
|
||||||
bool align; /* fill align the fields */
|
bool align; /* fill align the fields */
|
||||||
bool standard; /* old brain dead format */
|
bool standard; /* old brain dead format */
|
||||||
bool html3; /* output html tables */
|
bool html3; /* output html tables */
|
||||||
bool expanded; /* expand tables */
|
bool expanded; /* expand tables */
|
||||||
char *fieldSep; /* field separator */
|
char *fieldSep; /* field separator */
|
||||||
char *tableOpt; /* insert to HTML <table ...> */
|
char *tableOpt; /* insert to HTML <table ...> */
|
||||||
char *caption; /* HTML <caption> */
|
char *caption; /* HTML <caption> */
|
||||||
char **fieldName; /* null terminated array of repalcement field names */
|
char **fieldName; /* null terminated array of repalcement field names */
|
||||||
} PQprintOpt;
|
};
|
||||||
|
|
||||||
|
typedef struct _PQprintOpt PQprintOpt;
|
||||||
|
|
||||||
/* === in fe-connect.c === */
|
/* === in fe-connect.c === */
|
||||||
/* make a new client connection to the backend */
|
/* make a new client connection to the backend */
|
||||||
|
@ -176,6 +178,13 @@ extern char* PQoidStatus(PGresult *res);
|
||||||
extern char* PQgetvalue(PGresult *res, int tup_num, int field_num);
|
extern char* PQgetvalue(PGresult *res, int tup_num, int field_num);
|
||||||
extern int PQgetlength(PGresult *res, int tup_num, int field_num);
|
extern int PQgetlength(PGresult *res, int tup_num, int field_num);
|
||||||
extern void PQclear(PGresult* res);
|
extern void PQclear(PGresult* res);
|
||||||
|
/* PQdisplayTuples() is a better version of PQprintTuples() */
|
||||||
|
extern void PQdisplayTuples(PGresult *res,
|
||||||
|
FILE *fp, /* where to send the output */
|
||||||
|
int fillAlign, /* pad the fields with spaces */
|
||||||
|
char *fieldSep, /* field separator */
|
||||||
|
int printHeader, /* display headers? */
|
||||||
|
int quiet);
|
||||||
extern void PQprintTuples(PGresult* res,
|
extern void PQprintTuples(PGresult* res,
|
||||||
FILE* fout, /* output stream */
|
FILE* fout, /* output stream */
|
||||||
int printAttName,/* print attribute names or not*/
|
int printAttName,/* print attribute names or not*/
|
||||||
|
|
Loading…
Reference in New Issue