diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2003-05-13 18:39:50 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2003-05-13 18:39:50 +0000 |
commit | d9b679c13a820eb7b464a1eeb1f177c3fea13ece (patch) | |
tree | 8c405a613dbaa6577203ce3f838bbfa0226f151a | |
parent | 0249c24235817417a2fa23057822530d81800417 (diff) | |
download | postgresql-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.c | 22 |
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) { |