Skip to content
Snippets Groups Projects
Commit 4e82924e authored by Marc G. Fournier's avatar Marc G. Fournier
Browse files

Row count patch from Bruce

parent 7d2000e3
Branches
Tags
No related merge requests found
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-exec.c,v 1.11 1996/07/31 06:05:46 scrappy Exp $ * $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-exec.c,v 1.12 1996/07/31 18:40:09 scrappy Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -829,21 +829,22 @@ PQprint(FILE *fout, ...@@ -829,21 +829,22 @@ PQprint(FILE *fout,
nFields = PQnfields(res); nFields = PQnfields(res);
if ( nFields > 0 ) { /* only print tuples with at least 1 field. */ if ( nFields > 0 ) { /* only print tuples with at least 1 field. */
int i,j; int i,j;
int nTups; int nTups;
int *fieldMax=NULL; /* keep -Wall happy */ int *fieldMax=NULL; /* in case we don't use them */
unsigned char *fieldNotNum=NULL; /* keep -Wall happy */ unsigned char *fieldNotNum=NULL;
char **fields=NULL; /*keep -Wall happy */ char *border=NULL;
char **fields=NULL;
char **fieldNames; char **fieldNames;
int fieldMaxLen=0; int fieldMaxLen=0;
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 total_line_length = 0;
int usePipe = 0; int usePipe = 0;
char *pagerenv; char *pagerenv;
char buf[8192*2+1];
nTups = PQntuples(res); nTups = PQntuples(res);
if (!(fieldNames=(char **)calloc(nFields, sizeof (char *)))) if (!(fieldNames=(char **)calloc(nFields, sizeof (char *))))
{ {
perror("calloc"); perror("calloc");
...@@ -882,7 +883,10 @@ PQprint(FILE *fout, ...@@ -882,7 +883,10 @@ PQprint(FILE *fout,
if (fout == NULL) if (fout == NULL)
fout = stdout; fout = stdout;
if (po->pager && fout == stdout && isatty(fileno(stdout))) { if (po->pager && fout == stdout &&
isatty(fileno(stdin)) &&
isatty(fileno(stdout)))
{
/* try to pipe to the pager program if possible */ /* try to pipe to the pager program if possible */
#ifdef TIOCGWINSZ #ifdef TIOCGWINSZ
if (ioctl(fileno(stdout),TIOCGWINSZ,&screen_size) == -1 || if (ioctl(fileno(stdout),TIOCGWINSZ,&screen_size) == -1 ||
...@@ -907,8 +911,7 @@ PQprint(FILE *fout, ...@@ -907,8 +911,7 @@ PQprint(FILE *fout,
screen_size.ws_row - screen_size.ws_row -
(po->header != 0) * (po->header != 0) *
(total_line_length / screen_size.ws_col + 1) * 2 (total_line_length / screen_size.ws_col + 1) * 2
/*- 1 */ /* newline at end of tuple list */ - (po->header != 0) *2 /* row count and newline */
/*- (quiet == 0)*/
))) )))
{ {
fout = popen(pagerenv, "w"); fout = popen(pagerenv, "w");
...@@ -927,7 +930,8 @@ PQprint(FILE *fout, ...@@ -927,7 +930,8 @@ PQprint(FILE *fout,
perror("calloc"); perror("calloc");
exit(1); exit(1);
} }
} else }
else
if (po->header && !po->html3) if (po->header && !po->html3)
{ {
if (po->expanded) if (po->expanded)
...@@ -936,7 +940,8 @@ PQprint(FILE *fout, ...@@ -936,7 +940,8 @@ PQprint(FILE *fout,
fprintf(fout, "%-*s%s Value\n", fieldMaxLen-fs_len, "Field", po->fieldSep); fprintf(fout, "%-*s%s Value\n", fieldMaxLen-fs_len, "Field", po->fieldSep);
else else
fprintf(fout, "%s%sValue\n", "Field", po->fieldSep); fprintf(fout, "%s%sValue\n", "Field", po->fieldSep);
} else }
else
{ {
int len=0; int len=0;
for (j=0; j < nFields; j++) for (j=0; j < nFields; j++)
...@@ -959,8 +964,8 @@ PQprint(FILE *fout, ...@@ -959,8 +964,8 @@ PQprint(FILE *fout,
else else
fprintf(fout, "<centre><h2>Query retrieved %d tuples * %d fields</h2></centre>\n", nTups, nFields); fprintf(fout, "<centre><h2>Query retrieved %d tuples * %d fields</h2></centre>\n", nTups, nFields);
} }
for (i = 0; i < nTups; i++) { for (i = 0; i < nTups; i++)
char buf[8192*2+1]; {
if (po->expanded) if (po->expanded)
{ {
if (po->html3) if (po->html3)
...@@ -968,7 +973,8 @@ PQprint(FILE *fout, ...@@ -968,7 +973,8 @@ PQprint(FILE *fout,
else else
fprintf(fout, "-- RECORD %d --\n", i); fprintf(fout, "-- RECORD %d --\n", i);
} }
for (j = 0; j < nFields; j++) { for (j = 0; j < nFields; j++)
{
char *pval, *p, *o; char *pval, *p, *o;
int plen; int plen;
if ((plen=PQgetlength(res,i,j))<1 || !(pval=PQgetvalue(res,i,j)) || !*pval) if ((plen=PQgetlength(res,i,j))<1 || !(pval=PQgetvalue(res,i,j)) || !*pval)
...@@ -996,7 +1002,8 @@ PQprint(FILE *fout, ...@@ -996,7 +1002,8 @@ PQprint(FILE *fout,
exit(1); exit(1);
} }
strcpy(fields[i*nFields+j], buf); strcpy(fields[i*nFields+j], buf);
} else }
else
{ {
if (po->expanded) if (po->expanded)
{ {
...@@ -1089,7 +1096,8 @@ efield: ...@@ -1089,7 +1096,8 @@ efield:
{ {
fprintf(fout, "<th align=%s>%s</th>", fieldNotNum[j]? "left": "right", fprintf(fout, "<th align=%s>%s</th>", fieldNotNum[j]? "left": "right",
fieldNames[j]); fieldNames[j]);
} else }
else
{ {
int n=strlen(s); int n=strlen(s);
if (n>fieldMax[j]) if (n>fieldMax[j])
...@@ -1139,10 +1147,14 @@ efield: ...@@ -1139,10 +1147,14 @@ efield:
} }
free(fields); free(fields);
} }
if (po->header && !po->html3)
fprintf (fout, "(%d row%s)\n\n",PQntuples(res),
(PQntuples(res) == 1) ? "" : "s");
free(fieldMax); free(fieldMax);
free(fieldNotNum); free(fieldNotNum);
free(fieldNames); free(fieldNames);
if (usePipe) { if (usePipe)
{
pclose(fout); pclose(fout);
signal(SIGPIPE, SIG_DFL); signal(SIGPIPE, SIG_DFL);
} }
......
...@@ -6,7 +6,7 @@ ...@@ -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.4 1996/07/27 02:55:23 scrappy Exp $ * $Id: libpq-fe.h,v 1.5 1996/07/31 18:40:12 scrappy Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -128,12 +128,12 @@ typedef struct pg_result{ ...@@ -128,12 +128,12 @@ typedef struct pg_result{
} PGresult; } PGresult;
struct _PQprintOpt { struct _PQprintOpt {
bool header; /* print output field headers or not */ bool header; /* print output field headings and row count */
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 */
bool pager; /* use pager for output if needed */ bool pager; /* use pager for output if needed */
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> */
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment