From d9b679c13a820eb7b464a1eeb1f177c3fea13ece Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Tue, 13 May 2003 18:39:50 +0000 Subject: [PATCH] In RowDescription messages, report columns of domain datatypes as having the type OID and typmod of the underlying base type. Per discussions a few weeks ago with Andreas Pflug and others. Note that this behavioral change affects both old- and new-protocol clients. --- src/backend/access/common/printtup.c | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/src/backend/access/common/printtup.c b/src/backend/access/common/printtup.c index 6ad53ddb3c..1d2c6cc4f0 100644 --- a/src/backend/access/common/printtup.c +++ b/src/backend/access/common/printtup.c @@ -9,7 +9,7 @@ * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/access/common/printtup.c,v 1.72 2003/05/09 18:08:48 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/access/common/printtup.c,v 1.73 2003/05/13 18:39:50 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -181,6 +181,10 @@ SendRowDescriptionMessage(TupleDesc typeinfo, List *targetlist, int16 *formats) for (i = 0; i < natts; ++i) { + Oid atttypid = attrs[i]->atttypid; + int32 atttypmod = attrs[i]->atttypmod; + Oid basetype; + pq_sendstring(&buf, NameStr(attrs[i]->attname)); /* column ID info appears in protocol 3.0 and up */ if (proto >= 3) @@ -204,14 +208,18 @@ SendRowDescriptionMessage(TupleDesc typeinfo, List *targetlist, int16 *formats) pq_sendint(&buf, 0, 2); } } - pq_sendint(&buf, (int) attrs[i]->atttypid, - sizeof(attrs[i]->atttypid)); - pq_sendint(&buf, attrs[i]->attlen, - sizeof(attrs[i]->attlen)); + /* If column is a domain, send the base type and typmod instead */ + basetype = getBaseType(atttypid); + if (basetype != atttypid) + { + atttypmod = get_typtypmod(atttypid); + atttypid = basetype; + } + pq_sendint(&buf, (int) atttypid, sizeof(atttypid)); + pq_sendint(&buf, attrs[i]->attlen, sizeof(attrs[i]->attlen)); /* typmod appears in protocol 2.0 and up */ if (proto >= 2) - pq_sendint(&buf, attrs[i]->atttypmod, - sizeof(attrs[i]->atttypmod)); + pq_sendint(&buf, atttypmod, sizeof(atttypmod)); /* format info appears in protocol 3.0 and up */ if (proto >= 3) {