aboutsummaryrefslogtreecommitdiff
path: root/src/backend/access/common/tupdesc.c
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2003-08-11 23:04:50 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2003-08-11 23:04:50 +0000
commit302f1a86dc1125f681b9a3b3509d1be7e33b0e4f (patch)
tree9d31b15b5e5dac59aee0ce26597306a491512c31 /src/backend/access/common/tupdesc.c
parent730b3a150238578505638ab2331bf569c89d8f7b (diff)
downloadpostgresql-302f1a86dc1125f681b9a3b3509d1be7e33b0e4f.tar.gz
postgresql-302f1a86dc1125f681b9a3b3509d1be7e33b0e4f.zip
Rewriter and planner should use only resno, not resname, to identify
target columns in INSERT and UPDATE targetlists. Don't rely on resname to be accurate in ruleutils, either. This fixes bug reported by Donald Fraser, in which renaming a column referenced in a rule did not work very well.
Diffstat (limited to 'src/backend/access/common/tupdesc.c')
-rw-r--r--src/backend/access/common/tupdesc.c16
1 files changed, 7 insertions, 9 deletions
diff --git a/src/backend/access/common/tupdesc.c b/src/backend/access/common/tupdesc.c
index b76e03ed43f..9a40c08ca92 100644
--- a/src/backend/access/common/tupdesc.c
+++ b/src/backend/access/common/tupdesc.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/access/common/tupdesc.c,v 1.98 2003/08/04 02:39:56 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/access/common/tupdesc.c,v 1.99 2003/08/11 23:04:49 tgl Exp $
*
* NOTES
* some of the executor utility code such as "ExecTypeFromTL" should be
@@ -357,7 +357,7 @@ equalTupleDescs(TupleDesc tupdesc1, TupleDesc tupdesc2)
void
TupleDescInitEntry(TupleDesc desc,
AttrNumber attributeNumber,
- char *attributeName,
+ const char *attributeName,
Oid oidtypeid,
int32 typmod,
int attdim,
@@ -373,13 +373,6 @@ TupleDescInitEntry(TupleDesc desc,
AssertArg(PointerIsValid(desc));
AssertArg(attributeNumber >= 1);
AssertArg(attributeNumber <= desc->natts);
-
- /*
- * attributeName's are sometimes NULL, from resdom's. I don't know
- * why that is, though -- Jolly
- */
-/* AssertArg(NameIsValid(attributeName));*/
-
AssertArg(!PointerIsValid(desc->attrs[attributeNumber - 1]));
/*
@@ -394,6 +387,11 @@ TupleDescInitEntry(TupleDesc desc,
*/
att->attrelid = 0; /* dummy value */
+ /*
+ * Note: attributeName can be NULL, because the planner doesn't always
+ * fill in valid resname values in targetlists, particularly for resjunk
+ * attributes.
+ */
if (attributeName != NULL)
namestrcpy(&(att->attname), attributeName);
else