summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarc G. Fournier1998-08-30 19:30:38 +0000
committerMarc G. Fournier1998-08-30 19:30:38 +0000
commit3067ac8e77369c1b41195b4d90e2ff2c0b23bc7f (patch)
treef282cd9b0b92027550010d2ffb5712f1da720c63
parent3b7d13a6b0e6c242ee87d43119781937b0554db5 (diff)
From: Massimo Dal Zotto <[email protected]>
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():
-rw-r--r--src/backend/access/common/printtup.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/src/backend/access/common/printtup.c b/src/backend/access/common/printtup.c
index 936725a2ce5..24cd7ff9c7f 100644
--- a/src/backend/access/common/printtup.c
+++ b/src/backend/access/common/printtup.c
@@ -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));
+ }
}
}