aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2003-05-13 18:39:50 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2003-05-13 18:39:50 +0000
commitd9b679c13a820eb7b464a1eeb1f177c3fea13ece (patch)
tree8c405a613dbaa6577203ce3f838bbfa0226f151a
parent0249c24235817417a2fa23057822530d81800417 (diff)
downloadpostgresql-d9b679c13a820eb7b464a1eeb1f177c3fea13ece.tar.gz
postgresql-d9b679c13a820eb7b464a1eeb1f177c3fea13ece.zip
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.
-rw-r--r--src/backend/access/common/printtup.c22
1 files changed, 15 insertions, 7 deletions
diff --git a/src/backend/access/common/printtup.c b/src/backend/access/common/printtup.c
index 6ad53ddb3ca..1d2c6cc4f0a 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)
{