diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2003-08-11 23:04:50 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2003-08-11 23:04:50 +0000 |
commit | 302f1a86dc1125f681b9a3b3509d1be7e33b0e4f (patch) | |
tree | 9d31b15b5e5dac59aee0ce26597306a491512c31 /src/backend/access/common/tupdesc.c | |
parent | 730b3a150238578505638ab2331bf569c89d8f7b (diff) | |
download | postgresql-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.c | 16 |
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 |