]> granicus.if.org Git - postgresql/commitdiff
From: Massimo Dal Zotto <dz@cs.unitn.it>
authorMarc G. Fournier <scrappy@hub.org>
Sun, 30 Aug 1998 19:30:38 +0000 (19:30 +0000)
committerMarc G. Fournier <scrappy@hub.org>
Sun, 30 Aug 1998 19:30:38 +0000 (19:30 +0000)
After some playing with gdb I found that in printtup() there is a non null
attribute with typeinfo->attrs[i]->atttypid = 0 (invalid oid). Unfortunately
attibutes with invalid type are neither printed nor marked as null, and this
explains why psql doesn't get all the expected data.

So I made this patch to printtup():

src/backend/access/common/printtup.c

index 936725a2ce51119c40c4c57550a791b63330cd45..24cd7ff9c7f933f564e425969299892dc566573d 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/access/common/printtup.c,v 1.32 1998/08/19 02:00:54 momjian Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/access/common/printtup.c,v 1.33 1998/08/30 19:30:38 scrappy Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -123,9 +123,11 @@ printtup(HeapTuple tuple, TupleDesc typeinfo)
        for (i = 0; i < tuple->t_natts; ++i)
        {
                attr = heap_getattr(tuple, i + 1, typeinfo, &isnull);
-               typoutput = typtoout((Oid) typeinfo->attrs[i]->atttypid);
+               if (isnull)
+                       continue;
 
-               if (!isnull && OidIsValid(typoutput))
+               typoutput = typtoout((Oid) typeinfo->attrs[i]->atttypid);
+               if (OidIsValid(typoutput))
                {
                        outputstr = fmgr(typoutput, attr,
                                                         gettypelem(typeinfo->attrs[i]->atttypid),
@@ -140,6 +142,12 @@ printtup(HeapTuple tuple, TupleDesc typeinfo)
 #endif
                        pfree(outputstr);
                }
+               else
+               {
+                       outputstr = "<unprintable>";
+                       pq_putint(strlen(outputstr) + VARHDRSZ, VARHDRSZ);
+                       pq_putnchar(outputstr, strlen(outputstr));
+               } 
        }
 }