Row count patch from Bruce
authorMarc G. Fournier <scrappy@hub.org>
Wed, 31 Jul 1996 18:40:12 +0000 (18:40 +0000)
committerMarc G. Fournier <scrappy@hub.org>
Wed, 31 Jul 1996 18:40:12 +0000 (18:40 +0000)
src/interfaces/libpq/fe-exec.c
src/interfaces/libpq/libpq-fe.h

index ad4b20956a267c10478bcf91e6c0f0d966a6d8e6..14675d4f92bf1ff14454a3547e44e2d8c245ddc2 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * 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,
     nFields = PQnfields(res);
 
     if ( nFields > 0 ) {  /* only print tuples with at least 1 field.  */
-       int i,j;
-       int nTups;
-       int *fieldMax=NULL; /* keep -Wall happy */
-       unsigned char *fieldNotNum=NULL; /* keep -Wall happy */
-       char **fields=NULL; /*keep -Wall happy */
+       int i,j;
+       int nTups;
+       int *fieldMax=NULL;     /* in case we don't use them */
+       unsigned char *fieldNotNum=NULL;
+       char *border=NULL;
+       char **fields=NULL;
        char **fieldNames;
        int fieldMaxLen=0;
-       char *border=NULL;
-        int numFieldName;
+       int numFieldName;
        int fs_len=strlen(po->fieldSep);
-       int total_line_length = 0;
-       int usePipe = 0;
-       char *pagerenv;
+       int total_line_length = 0;
+       int usePipe = 0;
+       char *pagerenv;
+       char buf[8192*2+1];
 
-       nTups = PQntuples(res);
+       nTups = PQntuples(res);
        if (!(fieldNames=(char **)calloc(nFields, sizeof (char *))))
        {
                perror("calloc");
@@ -882,7 +883,10 @@ PQprint(FILE *fout,
  
        if (fout == NULL) 
                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 */
 #ifdef TIOCGWINSZ
                if (ioctl(fileno(stdout),TIOCGWINSZ,&screen_size) == -1 ||
@@ -907,8 +911,7 @@ PQprint(FILE *fout,
                        screen_size.ws_row -
                        (po->header != 0) *
                                (total_line_length / screen_size.ws_col + 1) * 2
-                       /*- 1 */ /* newline at end of tuple list */
-                       /*- (quiet == 0)*/
+                       - (po->header != 0) *2 /* row count and newline */
                        )))
                {
                        fout = popen(pagerenv, "w");
@@ -927,7 +930,8 @@ PQprint(FILE *fout,
                        perror("calloc");
                        exit(1);
                }
-       } else
+       }
+       else
                if (po->header && !po->html3)
                {
                        if (po->expanded)
@@ -936,7 +940,8 @@ PQprint(FILE *fout,
                                        fprintf(fout, "%-*s%s Value\n", fieldMaxLen-fs_len, "Field", po->fieldSep);
                                else
                                        fprintf(fout, "%s%sValue\n", "Field", po->fieldSep);
-                       } else
+                       }
+                       else
                        {
                                int len=0;
                                for (j=0; j < nFields; j++)
@@ -959,8 +964,8 @@ PQprint(FILE *fout,
                else
                        fprintf(fout, "<centre><h2>Query retrieved %d tuples * %d fields</h2></centre>\n", nTups, nFields);
        }
-        for (i = 0; i < nTups; i++) {
-           char buf[8192*2+1];
+        for (i = 0; i < nTups; i++)
+       {
            if (po->expanded)
            {
                if (po->html3)
@@ -968,7 +973,8 @@ PQprint(FILE *fout,
                else
                        fprintf(fout, "-- RECORD %d --\n", i);
            }
-            for (j = 0; j < nFields; j++) {
+            for (j = 0; j < nFields; j++)
+           {
                 char *pval, *p, *o;
                int plen;
                if ((plen=PQgetlength(res,i,j))<1 || !(pval=PQgetvalue(res,i,j)) || !*pval)
@@ -996,7 +1002,8 @@ PQprint(FILE *fout,
                                exit(1);
                        }
                        strcpy(fields[i*nFields+j], buf);
-               } else
+               }
+               else
                {
                        if (po->expanded)
                        {
@@ -1089,7 +1096,8 @@ efield:
                                {
                                        fprintf(fout, "<th align=%s>%s</th>", fieldNotNum[j]? "left": "right",
                                                fieldNames[j]);
-                               } else
+                               }
+                               else
                                {
                                        int n=strlen(s);
                                        if (n>fieldMax[j])
@@ -1139,10 +1147,14 @@ efield:
                }
                free(fields);
        }
+       if (po->header && !po->html3)
+               fprintf (fout, "(%d row%s)\n\n",PQntuples(res),
+                        (PQntuples(res) == 1) ? "" : "s");
        free(fieldMax);
        free(fieldNotNum);
        free(fieldNames);
-       if (usePipe) {
+       if (usePipe)
+       {
                pclose(fout);
                signal(SIGPIPE, SIG_DFL);
        }
index 483dcccff9e8326c3d5d9bc1fed0b94678104bdd..072039558c727c2b2b07ec2b0749a1660ca6f207 100644 (file)
@@ -6,7 +6,7 @@
  *
  * 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{
 } PGresult;
 
 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 standard;       /* old brain dead format */
     bool html3;          /* output html 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 *tableOpt;     /* insert to HTML <table ...> */
     char *caption;       /* HTML <caption> */