mirror of
				https://github.com/postgres/postgres.git
				synced 2025-10-31 00:03:57 -04:00 
			
		
		
		
	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 | ||||
|  *    $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 | ||||
|     case STARTUP_MSG: | ||||
| 	{ | ||||
| 	    struct passwd *pw = getpwuid(getuid()); | ||||
| 	    struct passwd *pw = getpwuid(geteuid()); | ||||
| 	    if (pw && | ||||
| 		pw->pw_name && | ||||
| 		(name = (char *) malloc(strlen(pw->pw_name) + 1))) { | ||||
|  | ||||
| @ -7,7 +7,7 @@ | ||||
|  * | ||||
|  * | ||||
|  * 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; | ||||
| 
 | ||||
|     conn = (PGconn*)malloc(sizeof(PGconn)); | ||||
|      | ||||
| 
 | ||||
|     if (!conn) { | ||||
| 	fprintf(stderr,"FATAL: pqsetdb() -- unable to allocate memory for a PGconn"); | ||||
| 	return (PGconn*)NULL; | ||||
|       fprintf(stderr,"FATAL: PQsetdb() -- unable to allocate memory for a PGconn"); | ||||
|       return (PGconn*)NULL; | ||||
|     } | ||||
| 	 | ||||
| 
 | ||||
|     conn->Pfout = NULL; | ||||
|     conn->Pfin = NULL; | ||||
|     conn->Pfdebug = NULL; | ||||
| @ -90,7 +90,7 @@ PQsetdb(char *pghost, char* pgport, char* pgoptions, char* pgtty, char* dbName) | ||||
|     } else | ||||
| 	conn->pghost = strdup(pghost); | ||||
| 
 | ||||
|     if (!pgport || pgport == '\0') { | ||||
|     if (!pgport || pgport[0] == '\0') { | ||||
| 	if (!(tmp = getenv("PGPORT"))) { | ||||
| 	    tmp = POSTPORT; | ||||
| 	} | ||||
| @ -98,7 +98,7 @@ PQsetdb(char *pghost, char* pgport, char* pgoptions, char* pgtty, char* dbName) | ||||
|     } else | ||||
| 	conn->pgport = strdup(pgport); | ||||
| 
 | ||||
|     if (!pgtty || pgtty == '\0') { | ||||
|     if (!pgtty || pgtty[0] == '\0') { | ||||
| 	if (!(tmp = getenv("PGTTY"))) { | ||||
| 	    tmp = DefaultTty; | ||||
| 	} | ||||
| @ -106,29 +106,42 @@ PQsetdb(char *pghost, char* pgport, char* pgoptions, char* pgtty, char* dbName) | ||||
|     } else | ||||
| 	conn->pgtty = strdup(pgtty); | ||||
| 
 | ||||
|     if (!pgoptions || pgoptions == '\0') { | ||||
|     if (!pgoptions || pgoptions[0] == '\0') { | ||||
| 	if (!(tmp = getenv("PGOPTIONS"))) { | ||||
| 	    tmp = DefaultOption; | ||||
| 	} | ||||
| 	conn->pgoptions = strdup(tmp); | ||||
|     } else | ||||
| 	conn->pgoptions = strdup(pgoptions); | ||||
| 
 | ||||
|     if (((tmp = dbName) && (dbName[0] != '\0')) || | ||||
| 	((tmp = getenv("PGDATABASE")))) | ||||
| #if 0 | ||||
|     if (!dbName || dbName[0] == '\0') { | ||||
| 	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); | ||||
|     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]; | ||||
|       if (tmp = fe_getauthname(errorMessage)) { | ||||
| 	conn->dbName = strdup(tmp); | ||||
| 	free(tmp); | ||||
|       } | ||||
|       else { | ||||
| 	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); | ||||
|         free(tmp); | ||||
|       } else { | ||||
|         sprintf(conn->errorMessage, | ||||
|               "FATAL: PQsetdb: Unable to determine a database name!\n"); | ||||
| /*      pqdebug("%s", conn->errorMessage); */ | ||||
|         conn->dbName = NULL; | ||||
|         return conn; | ||||
|       } | ||||
|     } | ||||
|     conn->status = connectDB(conn); | ||||
| @ -320,7 +333,7 @@ PQfinish(PGconn *conn) | ||||
|     fprintf(stderr,"PQfinish() -- pointer to PGconn is null"); | ||||
|   } else { | ||||
|     if (conn->status == CONNECTION_OK) | ||||
| 	closePGconn(conn); | ||||
|       closePGconn(conn); | ||||
|     freePGconn(conn); | ||||
|   } | ||||
| } | ||||
| @ -404,10 +417,8 @@ startup2PacketBuf(StartupInfo* s, PacketBuf* res) | ||||
|   strncpy(tmp, s->execFile, sizeof(s->execFile)); | ||||
|   tmp += sizeof(s->execFile); | ||||
|   strncpy(tmp, s->tty, sizeof(s->execFile)); | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| /* =========== accessor functions for PGconn ========= */ | ||||
| char*  | ||||
| PQdb(PGconn* conn) | ||||
| @ -416,7 +427,6 @@ PQdb(PGconn* conn) | ||||
|     fprintf(stderr,"PQdb() -- pointer to PGconn is null"); | ||||
|     return (char *)NULL; | ||||
|   } | ||||
| 
 | ||||
|   return conn->dbName; | ||||
| } | ||||
| 
 | ||||
| @ -438,7 +448,6 @@ PQoptions(PGconn* conn) | ||||
|     fprintf(stderr,"PQoptions() -- pointer to PGconn is null"); | ||||
|     return (char *)NULL; | ||||
|   } | ||||
| 
 | ||||
|   return conn->pgoptions; | ||||
| } | ||||
| 
 | ||||
| @ -449,7 +458,6 @@ PQtty(PGconn* conn) | ||||
|     fprintf(stderr,"PQtty() -- pointer to PGconn is null"); | ||||
|     return (char *)NULL; | ||||
|   } | ||||
| 
 | ||||
|   return conn->pgtty; | ||||
| } | ||||
| 
 | ||||
| @ -460,7 +468,6 @@ PQport(PGconn* conn) | ||||
|     fprintf(stderr,"PQport() -- pointer to PGconn is null"); | ||||
|     return (char *)NULL; | ||||
|   } | ||||
| 
 | ||||
|   return conn->pgport; | ||||
| } | ||||
| 
 | ||||
| @ -471,7 +478,6 @@ PQstatus(PGconn* conn) | ||||
|     fprintf(stderr,"PQstatus() -- pointer to PGconn is null"); | ||||
|     return CONNECTION_BAD; | ||||
|   } | ||||
| 
 | ||||
|   return conn->status; | ||||
| } | ||||
| 
 | ||||
| @ -482,7 +488,6 @@ PQerrorMessage(PGconn* conn) | ||||
|     fprintf(stderr,"PQerrorMessage() -- pointer to PGconn is null"); | ||||
|     return (char *)NULL; | ||||
|   } | ||||
| 
 | ||||
|   return conn->errorMessage; | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -7,18 +7,19 @@ | ||||
|  * | ||||
|  * | ||||
|  * 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 <unistd.h> | ||||
| #include <stdio.h> | ||||
| #include <string.h> | ||||
| #include <signal.h> | ||||
| #include <errno.h> | ||||
| #include "postgres.h" | ||||
| #include "libpq/pqcomm.h" | ||||
| #include "libpq-fe.h" | ||||
| #include <signal.h> | ||||
| 
 | ||||
| /* the tuples array in a PGresGroup  has to grow to accommodate the tuples */ | ||||
| /* 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 PGresAttValue* getTuple(PGconn *conn, PGresult *res, int binary); | ||||
| static PGresult* makeEmptyPGresult(PGconn *conn, ExecStatusType status); | ||||
| static void fill(int length, int max, char filler, FILE *fp); | ||||
| 
 | ||||
| /*
 | ||||
|  * 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 | ||||
|  * are returned from the backend. | ||||
|  *  are returned from the backend. | ||||
|  * Right now all columns are of fixed length, | ||||
|  * this should be changed to allow wrap around for | ||||
|  * tuples values that are wider. | ||||
| @ -728,10 +860,6 @@ PQprint(FILE *fout, | ||||
| 	char *border=NULL; | ||||
|         int numFieldName; | ||||
| 	int fs_len=strlen(po->fieldSep); | ||||
| 	int total_line_length = 0; | ||||
| 	int usePipe = 0; | ||||
| 	char *pager; | ||||
| 
 | ||||
|     	nTups = PQntuples(res); | ||||
| 	if (!(fieldNames=(char **)calloc(nFields, sizeof (char *)))) | ||||
| 	{ | ||||
| @ -763,37 +891,7 @@ PQprint(FILE *fout, | ||||
| 		len+=fs_len; | ||||
| 		if (len>fieldMaxLen) | ||||
| 			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 (!(fields=(char **)calloc(nFields*(nTups+1), sizeof(char *)))) | ||||
| @ -1012,10 +1110,6 @@ efield: | ||||
| 			fputc('\n', fout); | ||||
| 		} | ||||
| 		free(fields); | ||||
| 	   	if (usePipe) { | ||||
| 			pclose(fout); | ||||
| 			signal(SIGPIPE, SIG_DFL); | ||||
|     		} | ||||
| 	} | ||||
| 	free(fieldMax); | ||||
| 	free(fieldNotNum); | ||||
| @ -1135,17 +1229,14 @@ PQfn(PGconn *conn, | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| /* ====== accessor funcs for PGresult ======== */ | ||||
| 
 | ||||
| ExecStatusType  | ||||
| PQresultStatus(PGresult* res) | ||||
| {  | ||||
|     if (!res) {	 | ||||
| 	fprintf(stderr, "PQresultStatus() -- pointer to PQresult is null"); | ||||
| 	return PGRES_NONFATAL_ERROR; | ||||
|     if (!res) { | ||||
|       fprintf(stderr, "PQresultStatus() -- pointer to PQresult is null"); | ||||
|       return PGRES_NONFATAL_ERROR; | ||||
|     } | ||||
| 
 | ||||
|     return res->resultStatus;  | ||||
| @ -1154,22 +1245,20 @@ PQresultStatus(PGresult* res) | ||||
| int  | ||||
| PQntuples(PGresult *res)  | ||||
| { | ||||
|     if (!res) {  | ||||
| 	fprintf(stderr, "PQntuples() -- pointer to PQresult is null"); | ||||
| 	return (int)NULL;  | ||||
|     if (!res) { | ||||
|       fprintf(stderr, "PQntuples() -- pointer to PQresult is null"); | ||||
|       return (int)NULL; | ||||
|     } | ||||
| 
 | ||||
|     return res->ntups; | ||||
| } | ||||
| 
 | ||||
| int | ||||
| PQnfields(PGresult *res)  | ||||
| { | ||||
|     if (!res) {  | ||||
| 	fprintf(stderr, "PQnfields() -- pointer to PQresult is null"); | ||||
| 	return (int)NULL; | ||||
|     if (!res) { | ||||
|       fprintf(stderr, "PQnfields() -- pointer to PQresult is null"); | ||||
|       return (int)NULL; | ||||
|     } | ||||
| 
 | ||||
|     return res->numAttributes; | ||||
| } | ||||
| 
 | ||||
| @ -1179,10 +1268,9 @@ PQnfields(PGresult *res) | ||||
| char*  | ||||
| PQfname(PGresult *res, int field_num)  | ||||
| { | ||||
| 
 | ||||
|     if (!res) {  | ||||
| 	fprintf(stderr, "PQfname() -- pointer to PQresult is null"); | ||||
| 	return NULL;  | ||||
|     if (!res) { | ||||
|       fprintf(stderr, "PQfname() -- pointer to PQresult is null"); | ||||
|       return NULL; | ||||
|     } | ||||
| 
 | ||||
|     if (field_num > (res->numAttributes - 1))  { | ||||
| @ -1205,7 +1293,7 @@ PQfnumber(PGresult *res, char* field_name) | ||||
| { | ||||
|   int i; | ||||
| 
 | ||||
|   if (!res) {  | ||||
|   if (!res) { | ||||
|     fprintf(stderr, "PQfnumber() -- pointer to PQresult is null"); | ||||
|     return -1; | ||||
|   } | ||||
| @ -1226,9 +1314,9 @@ PQfnumber(PGresult *res, char* field_name) | ||||
| Oid | ||||
| PQftype(PGresult *res, int field_num)  | ||||
| { | ||||
|     if (!res) {  | ||||
| 	fprintf(stderr, "PQftype() -- pointer to PQresult is null"); | ||||
| 	return InvalidOid; | ||||
|     if (!res) { | ||||
|       fprintf(stderr, "PQftype() -- pointer to PQresult is null"); | ||||
|       return InvalidOid; | ||||
|     } | ||||
| 
 | ||||
|     if (field_num > (res->numAttributes - 1))  { | ||||
| @ -1245,9 +1333,9 @@ PQftype(PGresult *res, int field_num) | ||||
| int2 | ||||
| PQfsize(PGresult *res, int field_num)  | ||||
| { | ||||
|     if (!res) {  | ||||
| 	fprintf(stderr, "PQfsize() -- pointer to PQresult is null"); | ||||
| 	return (int2)NULL; | ||||
|     if (!res) { | ||||
|       fprintf(stderr, "PQfsize() -- pointer to PQresult is null"); | ||||
|       return (int2)NULL; | ||||
|     } | ||||
| 
 | ||||
|     if (field_num > (res->numAttributes - 1))  { | ||||
| @ -1262,11 +1350,10 @@ PQfsize(PGresult *res, int field_num) | ||||
| } | ||||
| 
 | ||||
| char* PQcmdStatus(PGresult *res) { | ||||
|   if (!res) {  | ||||
|   if (!res) { | ||||
|     fprintf(stderr, "PQcmdStatus() -- pointer to PQresult is null"); | ||||
|     return NULL; | ||||
|   } | ||||
| 
 | ||||
|   return res->cmdStatus; | ||||
| } | ||||
| 
 | ||||
| @ -1304,18 +1391,17 @@ char* PQoidStatus(PGresult *res) { | ||||
| char*  | ||||
| PQgetvalue(PGresult *res, int tup_num, int field_num) | ||||
| { | ||||
|     if (!res) {	 | ||||
| 	fprintf(stderr, "PQgetvalue() -- pointer to PQresult is null"); | ||||
| 	return NULL; | ||||
|     if (!res) { | ||||
|       fprintf(stderr, "PQgetvalue() -- pointer to PQresult is null"); | ||||
|       return NULL; | ||||
|     } | ||||
| 	 | ||||
| 
 | ||||
|     if (tup_num > (res->ntups - 1) || | ||||
| 	field_num > (res->numAttributes - 1))  { | ||||
| 	fprintf(stderr, | ||||
| 		"PQgetvalue: ERROR! field %d(of %d) of tuple %d(of %d) is not available",  | ||||
| 		field_num, res->numAttributes - 1, tup_num, res->ntups); | ||||
|     } | ||||
| 	 | ||||
|      | ||||
|     return res->tuples[tup_num][field_num].value; | ||||
| } | ||||
| @ -1328,8 +1414,8 @@ PQgetvalue(PGresult *res, int tup_num, int field_num) | ||||
| int | ||||
| PQgetlength(PGresult *res, int tup_num, int field_num) | ||||
| { | ||||
|     if (!res) {  | ||||
| 	fprintf(stderr, "PQgetlength() -- pointer to PQresult is null"); | ||||
|     if (!res) { | ||||
|       fprintf(stderr, "PQgetlength() -- pointer to PQresult is null"); | ||||
|         return (int)NULL; | ||||
|     } | ||||
| 
 | ||||
|  | ||||
| @ -6,7 +6,7 @@ | ||||
|  * | ||||
|  * 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; | ||||
| } PGresult; | ||||
| 
 | ||||
| typedef struct _PQprintOpt { | ||||
|     bool header;           /* print output field headers or not */ | ||||
|     bool align;            /* fill align the fields */ | ||||
|     bool standard;         /* old brain dead format */ | ||||
|     bool html3;            /* output html tables */ | ||||
|     bool expanded;         /* expand tables */ | ||||
|     char *fieldSep;        /* field separator */ | ||||
|     char *tableOpt;	   /* insert to HTML <table ...> */ | ||||
|     char *caption;         /* HTML <caption> */ | ||||
|     char **fieldName;      /* null terminated array of repalcement field names */ | ||||
| } PQprintOpt; | ||||
| struct _PQprintOpt { | ||||
|     bool header;         /* print output field headers or not */ | ||||
|     bool align;          /* fill align the fields */ | ||||
|     bool standard;       /* old brain dead format */ | ||||
|     bool html3;          /* output html tables */ | ||||
|     bool expanded;       /* expand tables */ | ||||
|     char *fieldSep;      /* field separator */ | ||||
|     char *tableOpt;	 /* insert to HTML <table ...> */ | ||||
|     char *caption;       /* HTML <caption> */ | ||||
|     char **fieldName;    /* null terminated array of repalcement field names */ | ||||
| }; | ||||
| 
 | ||||
| typedef struct _PQprintOpt PQprintOpt; | ||||
| 
 | ||||
| /* ===  in fe-connect.c === */ | ||||
|   /* 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 int PQgetlength(PGresult *res, int tup_num, int field_num); | ||||
| 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,  | ||||
| 			  FILE* fout,      /* output stream */ | ||||
| 			  int printAttName,/* print attribute names or not*/ | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user